jon*_*nas 31 python replace dataframe pandas
无论如何使用映射函数或更好的东西来替换整个数据帧中的值?
我只知道如何在系列上执行映射.
我想用'数'替换'tesst'和'set'列中的字符串,例如set = 1,test = 2
以下是我的数据集示例:(原始数据集非常大)
ds_r
respondent brand engine country aware aware_2 aware_3 age tesst set
0 a volvo p swe 1 0 1 23 set set
1 b volvo None swe 0 0 1 45 set set
2 c bmw p us 0 0 1 56 test test
3 d bmw p us 0 1 1 43 test test
4 e bmw d germany 1 0 1 34 set set
5 f audi d germany 1 0 1 59 set set
6 g volvo d swe 1 0 0 65 test set
7 h audi d swe 1 0 0 78 test set
8 i volvo d us 1 1 1 32 set set
Run Code Online (Sandbox Code Playgroud)
最终结果应该是
ds_r
respondent brand engine country aware aware_2 aware_3 age tesst set
0 a volvo p swe 1 0 1 23 1 1
1 b volvo None swe 0 0 1 45 1 1
2 c bmw p us 0 0 1 56 2 2
3 d bmw p us 0 1 1 43 2 2
4 e bmw d germany 1 0 1 34 1 1
5 f audi d germany 1 0 1 59 1 1
6 g volvo d swe 1 0 0 65 2 1
7 h audi d swe 1 0 0 78 2 1
8 i volvo d us 1 1 1 32 1 1
Run Code Online (Sandbox Code Playgroud)
感谢建议,
Dan*_*lan 49
In [9]: mapping = {'set': 1, 'test': 2}
In [10]: df.replace({'set': mapping, 'tesst': mapping})
Out[10]:
Unnamed: 0 respondent brand engine country aware aware_2 aware_3 age \
0 0 a volvo p swe 1 0 1 23
1 1 b volvo None swe 0 0 1 45
2 2 c bmw p us 0 0 1 56
3 3 d bmw p us 0 1 1 43
4 4 e bmw d germany 1 0 1 34
5 5 f audi d germany 1 0 1 59
6 6 g volvo d swe 1 0 0 65
7 7 h audi d swe 1 0 0 78
8 8 i volvo d us 1 1 1 32
tesst set
0 2 1
1 1 2
2 2 1
3 1 2
4 2 1
5 1 2
6 2 1
7 1 2
8 2 1
Run Code Online (Sandbox Code Playgroud)
正如@Jeff在评论中指出的那样,在pandas版本<0.11.1中,手动.convert_objects()粘贴到最终以正确转换tesst并设置为int64列,以防后续操作中的问题.
小智 20
我知道这是旧的,但为我那些搜索的人添加了.在pandas中创建一个数据帧,在此代码中为df
ip_addresses = df.source_ip.unique()
ip_dict = dict(zip(ip_addresses, range(len(ip_addresses))))
Run Code Online (Sandbox Code Playgroud)
这将为您提供IP地址的字典映射,而无需将其写出来.
要将“volvo”、“bmw”等字符串转换为整数,首先将其转换为数据帧,然后将其传递给 pandas.get_dummies()
df = DataFrame.from_csv("myFile.csv")
df_transform = pd.get_dummies( df )
print( df_transform )
Run Code Online (Sandbox Code Playgroud)
更好的选择:将字典传递给 pandas 系列(df.myCol)的 map() (例如通过指定列品牌)
df.brand = df.brand.map( {'volvo':0 , 'bmw':1, 'audi':2} )
Run Code Online (Sandbox Code Playgroud)
您可以使用applymapDataFrame函数执行此操作:
In [26]: df = DataFrame({"A": [1,2,3,4,5], "B": ['a','b','c','d','e'],
"C": ['b','a','c','c','d'], "D": ['a','c',7,9,2]})
In [27]: df
Out[27]:
A B C D
0 1 a b a
1 2 b a c
2 3 c c 7
3 4 d c 9
4 5 e d 2
In [28]: mymap = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
In [29]: df.applymap(lambda s: mymap.get(s) if s in mymap else s)
Out[29]:
A B C D
0 1 1 2 1
1 2 2 1 3
2 3 3 3 7
3 4 4 3 9
4 5 5 4 2
Run Code Online (Sandbox Code Playgroud)
替换数据框中任何值的最简单方法:
df=df.replace(to_replace="set",value="1")
df=df.replace(to_replace="test",value="2")
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
54201 次 |
| 最近记录: |