我正试图为我的项目做预处理python代码。目前,我有多个csv文件。我正在尝试做以下步骤来满足我的愿望:
- 从所有csv和组合行(从多个csv生成一个csv)中只选择一个名为
y
的行。 - 转换整个csv数据
- 给头
- 最后在列的末尾再加一列,并加上&;0&;;最多100行,并添加"1"100行后(剩余)。
。当前csv(所有csv都包含3列x, y和z的类似数据)
csv1.
<表类>x y z tbody><<tr>0.001796 0.116487 0 0.0035920.116487 0 0.0053870.116487 0 0.0071830.116487 0 0.0089790.116487 0 0.0107750.116486 0 0.0125710.116486 0 0.0143670.116486 0 0.0161620.116486 0 .......... ........... … 表类>
第一步:做一个可复制的例子。
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)