Python Pandas - 应用特定列名称的更改

2024-10-03 23:28:02 发布

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

所以我有一个[Python2.7]熊猫数据帧(df),如下所示:

        name    flag  dummy_D random ID dummy_S dummy_T 
0       Mick  Purple    2     NaN   1     21       32
1       John     Red   NaN    NaN   2    w32       4  
2  Christine     NaN    2     NaN   2    w33       3 
3     Stevie     NaN    4     NaN   2    w34       2 
4    Lindsey     NaN    5     NaN   2    w35      NaN 

我想用以前的值替换所有列中声明为“dummy”的NaN(并且只有这些列,而数据帧的其余部分保持不变)

以下是我所做的:

dummycol = [col for col in df.columns if 'dummy' in col] 

for d in dummycol:
      df[d] = df[d].fillna(method = 'pad')

我的问题是:

熊猫有没有更好的方法(在编码和内存效率方面)来代替浪费内存来创建列表+循环?如果有一个一行解决方案就太好了!

非常感谢!你知道吗

威尔


Tags: 数据内存nameiniddfforcol
3条回答

这避免了您对列表的理解,只在列上循环一次:

for d in df.columns:
    df[d] = df[d].fillna(method = 'pad') if 'dummy' in d

您可以将条件列表理解与.loc一起使用:

_ = [df.loc[:, col].fillna(method='ffill', inplace=True) for col in df if col[:5] == 'dummy']

>>> df
        name    flag  dummy_D  random  ID dummy_S  dummy_T
0       Mick  Purple        2     NaN   1      21       32
1       John     Red        2     NaN   2     w32        4
2  Christine     NaN        2     NaN   2     w33        3
3     Stevie     NaN        4     NaN   2     w34        2
4    Lindsey     NaN        5     NaN   2     w35        2

您可以这样做,因此可以调用列上的^{}来获取感兴趣的列,然后同时调用所有这些列上的^{}

In [152]:
cols = df.columns[df.columns.str.startswith('dummy')]
df[cols] = df[cols].fillna(method='pad')
df

Out[152]:
        name    flag  dummy_D  random  ID dummy_S  dummy_T
0       Mick  Purple        2     NaN   1      21       32
1       John     Red        2     NaN   2     w32        4
2  Christine     NaN        2     NaN   2     w33        3
3     Stevie     NaN        4     NaN   2     w34        2
4    Lindsey     NaN        5     NaN   2     w35        2

相关问题 更多 >