Mar*_*ria 3 python dictionary replace dataframe pandas
我有一个包含主题 # 映射的文本文件 (subject_ID_dict.csv),如下所示:
30704 703
30705 849
30714 682
30720 699
30727 105
30729 708
30739 707
30757 854
30758 710
30763 724
30771 715
30773 99
30777 719
30779 717
30798 728
30805 732
30809 727
30831 734
30838 736
30868 735
30908 742
30929 115
30942 747
30944 743
30993 745
31006 116
31018 113
31040 758
31055 756
31057 755
31058 754
31068 760
31091 885
31147 764
31193 765
31196 767
31202 766
31209 117
31235 118
31268 772
31275 771
40017 -88
40018 542
40021 557
40023 28
Run Code Online (Sandbox Code Playgroud)
我想将其作为字典加载并使用它来替换 data.csv 中第一列中的值。例如,40023 将变为 28。
这是我的代码:
import pandas as pd
from collections import defaultdict
# load text file where we want to replace things
df = pd.read_csv('data.csv', header=0)
# make dictionary
d = defaultdict(list)
with open('subject_ID_dict.csv') as f:
for line in f:
line=str(line)
k, v = map(int, line.split())
d[k].append(v)
print df['subid'].replace(d, inplace=True)
Run Code Online (Sandbox Code Playgroud)
当我打印 d 时,我得到了这个(片段,因为它很长):
defaultdict(<type 'list'>, {30720: [699], 30727: [105], 30729: [708], 30739: [707], 70319: [7066], 30757: [854], 30758: [710], 30763: [724], 30771: [715], 30773: [99], 70514: [7052], 30777: [719], 30779: [717], 70721: [-88], 70405: [-88], 30798: [728], 50331: [503310], 30805: [732], 30809: [727], 70674: [7080], 30831: [734], 30838: [736],
Run Code Online (Sandbox Code Playgroud)
如何使用我的字典 d 从 subject_ID_dict.csv 重新映射 data.csv 的“subjid”列?
首先,为了方便快速替换,创建一个平面词典。不要使用defaultdict.
d = {}
with open('subject_ID_dict.csv') as f:
for line in f:
k, v = map(int, line.split())
d[k] = v
Run Code Online (Sandbox Code Playgroud)
接下来,使用df.map来转换您的subid列。
df['subid'] = df['subid'].map(d)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |