2017-09-14 63 views
1

我有一个大数据框df,14列* 800行。独立地,我有2列的文件(让这些条目说):在熊猫数据框中,如何用元素y替换所有元素x?

car   one 
bus   two 
bike   three 
...   

我要搜索数据框df并替换出现在与同一行中的相应元素左栏的所有值右列 - 意味着,无论我在哪里找到“汽车”作为数据框中的条目,我都会将其替换为“一”,无论我在哪里找到“总线”,我都将其替换为“二”等。我发现熊猫的dunctions.replace和.isin,但我缺乏将它们结合在一起的技巧。

任何人都可以告诉我如何在dataframe中进行替换吗?


建议解决方案:

在列读取(汽车,公共汽车,自行车,...)和(一,二,三,......)到numpy的阵列,列表,例如(汽车,公共汽车,自行车......)变成list_old和(一,二,三......)变成list_new。例如,这对于pandas pd.read_fwf是可行的。然后,人们可以使用熊猫的便利功能。替换功能:

df.replace(to_replace=list_old, value=list_new, inplace=True) 

而这个技巧!请注意,它也负责按索引匹配(list_old [n]替换为list_new [n])

回答

1

假设您将文件加载到数据框df1中。用它首先生成一个映射:

mapping = dict(df1[['col1', 'col2'].values) 

或者,

mapping = df1.set_index('col1')['col2'] 

现在叫df.replace您的实际数据框,说df2

df2.replace(mapping) 

或者,你可以使用df.map - 非 - 匹配转换为NaN;

df2.map(mapping) 
+0

或'映射= df1.set_index('col1')['col2']' – Zero

2

我想你可以通过DataFrame.replaceSeries创建set_index

df = df.replace(df.set_index('col1')['col2']) 

或者通过dict

df = df.replace(df.set_index('col1')['col2'].to_dict()) 

样品:

df = pd.DataFrame({'col1':['car','bus','bike'], 
        'col2':['one','two','three'], 
        'col3':['car','bike','bike']}) 
print (df) 
    col1 col2 col3 
0 car one car 
1 bus two bike 
2 bike three bike 

df = df.replace(df.set_index('col1')['col2']) 
print (df) 
    col1 col2 col3 
0 one one one 
1 two two three 
2 three three three