我想解决一个基本归结为此的问题: 我有标识号(数千个),每个都应该与一组字母唯一链接。让我们通过e来称呼它们。如果有帮助,可以从另一列(y)填充这些。 偶尔其中一个字母丢失并注册为NAN。如何更换,以便获得所有必需的数字。
Idnumber X y
1 a a
2 a a
1 b b
1 NaN d
2 b NaN
1 d c
2 c NaN
1 NaN e
2 d d
2 e e
任何给定的x都可能丢失。 数据集太大了,无法简单地添加所有可能性并丢弃重复数据。 想法是:
Idnumber X
1 a
2 a
1 b
1 c
2 b
1 d
2 c
1 e
2 d
2 e
主要问题是获得一个独特的解决方案。因此,确保我用c替换一个NaN,用e替换一个NaN。
答案 0 :(得分:1)
这是你要找的吗?或者这会占用太多内存吗?如果确实使用了太多RAM,则可以使用read_csv中的chunksize parameter。然后将每个单独的块写入csv的结果(带有重复项和nans删除),然后加载它们并再次删除重复项 - 这次只删除跨块冲突的重复项。
#Loading Dataframe
from StringIO import StringIO
x=StringIO('''Idnumber,X,y
1,a,a
2,a,a
1,b,b
1,NaN,d
2,b,NaN
1,d,c
2,c,NaN
1,NaN,e
2,d,d
2,e,e''')
#Operations on Dataframe
df = pd.read_csv(x)
df1 = df[['Idnumber','X']]
df2 = df[['Idnumber','y']]
df2.rename(columns={'y': 'X'}, inplace=True)
pd.concat([df1,df2]).dropna().drop_duplicates()