【问题标题】:How to simplify this loop (DataFrame in pandas)如何简化这个循环(熊猫中的DataFrame)
【发布时间】:2022-01-08 20:32:58
【问题描述】:
嘿,我有一个 DataFrame,其中 Values 列的值是列表,其中每个列表包含一个包含 3 个字符的字符串。对于来自values_list 的values,我想将Values 列中每个列表中的最后一个字符替换为“I”。这是我当前的代码:
for i in range(len(data["Values"])):
for k in range(len(data.iloc[i]["Values"])):
if data.iloc[i]["Values"][k] in values_list:
data.iloc[i]["Values"][k] = data.iloc[i]["Values"][k][:2] + "I"
我怎样才能以更合适的方式重写它?
【问题讨论】:
标签:
python
python-3.x
pandas
dataframe
【解决方案1】:
不太清楚您要做什么,但我认为这就是您的意思。
您可以定义函数,然后在该列上使用.map():
import pandas as pd
data = pd.DataFrame({'Values':[['aaa','bbb','ccc'],
['ddd','eee','fff']]})
print(data)
values_list = ['aaa', 'ccc', 'eee']
def subI(value_list):
value_list = [x[:-1] + 'I' if x in values_list else x for x in value_list]
return value_list
data['Values'] = data['Values'].map(subI)
print(data)
输出:
print(data)
Values
0 [aaa, bbb, ccc]
1 [ddd, eee, fff]
Values
0 [aaI, bbb, ccI]
1 [ddd, eeI, fff]