在csv的同一列中添加两个不同的值



我正试图为我的项目做预处理python代码。目前,我有多个csv文件。我正在尝试做以下步骤来满足我的愿望:

  1. 从所有csv和组合行(从多个csv生成一个csv)中只选择一个名为y的行。
  2. 转换整个csv数据
  3. 给头
  4. 最后在列的末尾再加一列,并加上&;0&;;最多100行,并添加"1"100行后(剩余)。

。当前csv(所有csv都包含3列x, y和z的类似数据)

csv1.

<表类>xy ztbody><<tr>0.0017960.11648700.0035920.11648700.0053870.11648700.0071830.11648700.0089790.11648700.0107750.11648600.0125710.11648600.0143670.11648600.0161620.1164860.....................…

第一步:做一个可复制的例子。

files = [f'/tmp/foo_{i:03d}.csv' for i in range(300)]
for filename in files:
pd.DataFrame(
np.random.uniform(size=(200, 3)),
columns=list('xyz')
).to_csv(filename, index=False)

步骤2解决方案:

# read all files, select first n_values of column y and concatenate as rows
n_values = 4  # change to the number of columns desired in output
df = pd.concat([
pd.read_csv(filename).head(n_values)[['y']].T
for filename in files
]).reset_index(drop=True)
# change column names 0 --> y1, 1 --> y2, etc.
df.columns = [f'y{c+1}' for c in df.columns]
# add a column 'type' with value 0 for first 100 rows, then 1 for next 100, etc.
df['type'] = df.index // 100
# result
>>> df
y1        y2        y3        y4  type
0    0.526375  0.984637  0.684822  0.621827     0
1    0.483059  0.451609  0.466958  0.810819     0
2    0.459988  0.215904  0.925931  0.520551     0
3    0.559822  0.847502  0.382065  0.371135     0
4    0.465607  0.621670  0.670426  0.266533     0
..        ...       ...       ...       ...   ...
295  0.865073  0.472095  0.579716  0.499318     2
296  0.202211  0.440066  0.546456  0.218273     2
297  0.265703  0.416152  0.847737  0.342023     2
298  0.569874  0.634658  0.774765  0.521240     2
299  0.010179  0.148335  0.917785  0.927565     2

如果相反,列type应该在前100行为0,之后为1:

df['type'] = (df.index >= 100).astype(int)

相关内容

  • 没有找到相关文章