首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在大型DataFrame中替换无效值的内存高效解决方案?

在大型DataFrame中替换无效值的内存高效解决方案?
EN

Stack Overflow用户
提问于 2018-12-05 13:06:14
回答 1查看 174关注 0票数 0

此问题是以下内容的延续:How to replace certain rows by shared column values in pandas DataFrame?

假设我有以下熊猫DataFrame:

代码语言:javascript
复制
import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13], ['Bob', '#'], ['Bob', '#'], ['Bob', '#'], ['Clarke', '#']]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)

     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob   #
4     Bob   #
5     Bob   #
6  Clarke   #

行3-6有无效的值,字符串#。这些应改为有效值,输出:

代码语言:javascript
复制
     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob  12
4     Bob  12
5     Bob  12
6  Clarke  13

为替换所讨论的这些值而讨论的熊猫解决方案是使用coerce,或者用子集数据框架替换:

代码语言:javascript
复制
v = df.assign(Age=pd.to_numeric(df['Age'], errors='coerce')).dropna()
df['Age'] = df['Name'].map(v.set_index('Name').Age) 

代码语言:javascript
复制
d= df[df['Age']!='#'].set_index('Name')['Age']
df['Age']=df['Name'].replace(d)

问题是对于拥有数百万行的熊猫DataFrame来说,这些基于熊猫的解决方案变得非常内存密集。

在这种情况下,对熊猫来说,最实际的解决方案是什么?

我可以尝试使用df[df['Age']!='#']创建一个庞大的字典,以Name: Age作为键值对。然后,逐行遍历原始的熊猫DataFrame;如果有带有Age==#的行,则根据字典中的键值对替换它。这样做的缺点是,换循环将花费永远的时间。

还有其他更好的解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 13:17:44

如果你尝试一些内存效率更高的东西,比如基于字典的替换,而不是基于系列的替换呢?

代码语言:javascript
复制
mapping = dict(df.drop_duplicates('Name', keep='first').values)
df['Age'] = df['Name'].map(mapping)

print(df)
     Name  Age
0    Alex   10
1     Bob   12
2  Clarke   13
3     Bob   12
4     Bob   12
5     Bob   12
6  Clarke   13

另一种选择是使用列表理解:

代码语言:javascript
复制
mapping = dict(df.drop_duplicates('Name', keep='first').values)
df['Age'] = [mapping.get(x, np.nan) for x in df['Name']]

print(df)
     Name  Age
0    Alex   10
1     Bob   12
2  Clarke   13
3     Bob   12
4     Bob   12
5     Bob   12
6  Clarke   13

假设“年龄”中的有效值是第一位的,这应该是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53633043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档