如何忽略数据帧内随机分布在数据帧中的空单元格?这是我所拥有的一个例子
ColA ColB ColC ColD ColF ColG ColH
A b D
W R D
J H T
Q A O
每行总共有3个条目,但空单元格是随机的。我看了here,但由于数据的随机性,它没有帮助
我期待的输出是:
ColA_New ColB_New ColC_New
A b D
W R D
J H T
Q A O
答案 0 :(得分:5)
类似于@cᴏʟᴅsᴘᴇᴇᴅ的解决方案:
In [185]: pd.DataFrame(df.stack().values.reshape(-1,3),
columns='ColA_New ColB_New ColC_New'.split(),
index=df.index)
Out[185]:
ColA_New ColB_New ColC_New
0 A b D
1 W R D
2 J H T
3 Q A O
答案 1 :(得分:4)
假设您的空格为NaN
s,请将df.notnull
与numpy的索引和reshape
结合使用。请注意,花式列命名逻辑适用于任意数量的列。
print(df)
ColA ColB ColC ColD ColF ColG ColH
0 A NaN b NaN NaN NaN D
1 NaN W NaN NaN R NaN D
2 J NaN NaN H NaN T NaN
3 Q NaN A NaN NaN NaN O
m = df.notnull()
x = m.sum(1).max()
df = pd.DataFrame(df.values[m].reshape(-1, x))\
.rename(columns=lambda x: 'Col_' + chr(ord('A') + x))
print(df)
Col_A Col_B Col_C
0 A b D
1 W R D
2 J H T
3 Q A O
相反,如果您的数据框包含空格,请使用df.ne
,其余内容相同。
m = df.ne('')
如果这是您的CSV文件的外观,那么您不需要任何此类文件。相反,使用pd.read_csv
:
df = pd.read_csv('file.csv', skiprows=1, delim_whitespace=True)
如果需要,您可以使用rename
重命名列,如上所述。
答案 2 :(得分:3)
还有
ndf = df.replace('',np.nan).apply(sorted,key=pd.isnull,axis=1).add_suffix('_NEW')
ndf = ndf.loc[:,~ndf.isnull().all()]
ColA_NEW ColB_NEW ColC_NEW 0 A b D 1 W R D 2 J H T 3 Q A O
答案 3 :(得分:3)
dropna
的解决方案:
df1 = df.apply(lambda x: pd.Series(x.dropna().values), axis=1)
df1.columns = df.columns[:len(df1.columns)]
print (df1)
ColA ColB ColC
0 A b D
1 W R D
2 J H T
3 Q A O