所以我在数据帧中有4列:W,X,Y,Z。
我有一个CSV文件,其中包含一些行,其中一些包含4个项目,3个项目和每行2个项目。
我正在使用:
frame = pd.read_csv("file_example.csv", names = [ 'W', 'X', 'Y', 'Z'])
有没有办法让它成为3个行填充W X和Z跳过Y然后离开NAN?并且类似地使得具有2个项目的行填充W和Z,跳过X和Y?现在它只是填写它遇到的第一列。
换句话说,有没有办法根据行中的项目数来选择要填充的行?
感谢。
编辑: 输入(对应于输出):
2,seafood,21418
2,stews,24126
2,seafood,23287
2,sandwiches,17429
和
4,6237
4,30815
4,5321
4,49248
尝试下面的方法,我将每个4,3,2项行放置100条测试线。 输出的示例部分:
3项目行:
2 seafood 21418.0 21418
2 stews 24126.0 24126
2 seafood 23287.0 23287
2 sandwiches 17429.0 17429
2项目行:
4 6237 NaN 6237
4 30815 NaN 30815
4 5321 NaN 5321
4 49248 NaN 49248
z正确填充,但NaN没有掩盖。
编辑2:未将新数据帧分配给变量。解决方案有效。
答案 0 :(得分:0)
import numpy as np
import pandas as pd
df = pd.read_csv('test.csv', names=['W', 'X', 'Y', 'Z'])
df
Out: W X Y Z 0 10 Blue 20160809.0 203.0 1 12 Red 20160810.0 4578.0 2 9 Red 3094.0 NaN 3 15 Yellow 109.0 NaN 4 1 86 NaN NaN 5 5 9384 NaN NaN 6 56 3490 NaN NaN
记录NaN的位置:
nans = df.isnull().values
填写Z栏:
df['Z'] = df['Z'].fillna(df['Y'].fillna(df['X']))
将NaNs向左移动:
df.mask(np.roll(nans, -1), np.nan)
Out: W X Y Z 0 10 Blue 20160809.0 203 1 12 Red 20160810.0 4578 2 9 Red NaN 3094 3 15 Yellow NaN 109 4 1 NaN NaN 86 5 5 NaN NaN 9384 6 56 NaN NaN 3490