Python Pandas - 如何让 .replace 函数与字典和条件一起工作?
Python Pandas - How can I make .replace function work with dict and conditionals?
我正在尝试更改 .CSV 行数据。所以对于新数据,我有一个命令。我想说 python 如果我的字典中的键等于我的 .csv 中的项目行,则更改另一行中的数据。
CSV 文件类似于:
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
字典看起来像这样:
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
请注意,在 .csv 文件中 ID 可以重复,但在字典中不能重复(因为它是这样工作的)。因此,当我访问字典中的 key 并且该键等于 .csv 文件中的 ID 时, value_2 行(例如)必须将其内容更改为字典中键的 值。
希望大家能理解我的解释:/
然后我尝试了这样的事情。但我真的不知道问题出在我的编码上还是 pandas:
for key, values in dictionary.items():
if list(str(keys)) == list(df['ID']):
df['VALUE'].replace(to_replace='VALUES', value= values, inplace= True)
但它不起作用。还在 for 循环之外尝试过,没有 if。它只是行不通。但是会创建一个新行,指示 .csv 文件的长度。
也许我不必使用 pandas 来执行此操作?任何建议都会有所帮助!
我很确定这就是您想要的 - 尽管您的问题不是很清楚。
# assuming df is this
"""
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
"""
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
df["ID"] = df["ID"].astype(int)
df["column_with_mapped_value"] = df["ID"].replace(to_replace=dictionary)
# output
"""
ID Value_1 Value_2 Value_3 column_with_mapped_value
0 1 info changeme info info1
1 1 info changeme info info1
2 2 info changeme2 info info2
3 3 info changeme3 info info3
"""
为了遍历检查条件的数据集,我通常使用 apply 方法。在你的情况下,会是这样的:
import pandas as pd
df = pd.read_csv('teste.csv', sep=';')
# ID Value_1 Value_2 Value_3
# 1 info changeme info
# 1 info changeme info
# 2 info changeme info
# 3 info changeme info
# 5 info changeme info
dictionary = {1: 'info1', 2: 'info2', 3: 'info3', 4: 'info4'}
df['Value_2'] = df.apply(lambda x: dictionary[x.ID] if x.ID in dictionary else x.Value_2, axis=1)
# ID Value_1 Value_2 Value_3
# 1 info info1 info
# 1 info info1 info
# 2 info info2 info
# 3 info info3 info
# 5 info changeme info
我在 csv 和字典中又添加了一行,以测试如果其中一个键不存在会发生什么情况。
我正在尝试更改 .CSV 行数据。所以对于新数据,我有一个命令。我想说 python 如果我的字典中的键等于我的 .csv 中的项目行,则更改另一行中的数据。
CSV 文件类似于:
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
字典看起来像这样:
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
请注意,在 .csv 文件中 ID 可以重复,但在字典中不能重复(因为它是这样工作的)。因此,当我访问字典中的 key 并且该键等于 .csv 文件中的 ID 时, value_2 行(例如)必须将其内容更改为字典中键的 值。
希望大家能理解我的解释:/
然后我尝试了这样的事情。但我真的不知道问题出在我的编码上还是 pandas:
for key, values in dictionary.items():
if list(str(keys)) == list(df['ID']):
df['VALUE'].replace(to_replace='VALUES', value= values, inplace= True)
但它不起作用。还在 for 循环之外尝试过,没有 if。它只是行不通。但是会创建一个新行,指示 .csv 文件的长度。
也许我不必使用 pandas 来执行此操作?任何建议都会有所帮助!
我很确定这就是您想要的 - 尽管您的问题不是很清楚。
# assuming df is this
"""
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
"""
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
df["ID"] = df["ID"].astype(int)
df["column_with_mapped_value"] = df["ID"].replace(to_replace=dictionary)
# output
"""
ID Value_1 Value_2 Value_3 column_with_mapped_value
0 1 info changeme info info1
1 1 info changeme info info1
2 2 info changeme2 info info2
3 3 info changeme3 info info3
"""
为了遍历检查条件的数据集,我通常使用 apply 方法。在你的情况下,会是这样的:
import pandas as pd
df = pd.read_csv('teste.csv', sep=';')
# ID Value_1 Value_2 Value_3
# 1 info changeme info
# 1 info changeme info
# 2 info changeme info
# 3 info changeme info
# 5 info changeme info
dictionary = {1: 'info1', 2: 'info2', 3: 'info3', 4: 'info4'}
df['Value_2'] = df.apply(lambda x: dictionary[x.ID] if x.ID in dictionary else x.Value_2, axis=1)
# ID Value_1 Value_2 Value_3
# 1 info info1 info
# 1 info info1 info
# 2 info info2 info
# 3 info info3 info
# 5 info changeme info
我在 csv 和字典中又添加了一行,以测试如果其中一个键不存在会发生什么情况。