大Pandas数据框架中随机散乱空间的剔除

2024-09-28 16:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如何忽略数据帧中随机分布的空单元格?这是一个我所拥有的例子

 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                             

Tags: 数据newhere条目例子随机性coldcolc
3条回答

类似于@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

假设您的空格是NaNs,请将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文件的样子,那么你就不需要这些了。相反,在加载CSV时,可以使用pd.read_csv将问题消灭在萌芽状态:

df = pd.read_csv('file.csv', skiprows=1, delim_whitespace=True)

如果需要,可以使用rename重命名列,如上所述。你知道吗

也与

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

相关问题 更多 >