假设我有一个df数据框架,我想遍历列df['Social Distancing Advisory'],并将str "sah"替换为"1","sip"替换为"0"。
我确实知道,通常不鼓励使用Pandas DataFrames来迭代DataFrames循环,但是为了理解,假设我想这样做。
import pandas as pd
df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')
for row in df['Social Distancing Advisory']:
if df['Social Distancing Advisory'] == 'sah':
df['Social Distancing Advisory'].replace('sah','1')
if df['Social Distancing Advisory'] == 'sip':
df['Social Distancing Advisory'].replace('sip','0')ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
编辑
效率最低的方法(不建议使用sip ):在两列上循环,如果满足条件,则手动替换每个值,如果它们是sip或sah,则为-that
for row in df['Social Distancing Advisory']:
if row == 'sah':
row = "1"
elif row == "sip":
row = "0"df.iloc布尔索引是
df.iloc[df['Social Distancing Advisory'] == 'sah', 'Social Distancing Advisory'] = '1'
df.iloc[df['Social Distancing Advisory'] == 'sip', 'Social Distancing Advisory'] = '0'发布于 2020-04-29 13:44:04
您不需要迭代来替换字符串。下面是一个例子。
import pandas as pd
df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')
df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace('sah',1)
df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace('sip',0)
print(df)发布于 2020-04-29 13:50:59
您可以得到ValueError,因为df['Social Distancing Advisory'] == 'sah'语句给出了一系列布尔值--值与'sah'、False匹配的索引的True。这正是错误消息所读取的内容。
下面的代码可以通过提供所需更改的映射来使用pd.Series.replace方法解决问题
import pandas as pd
df = pd.read_excel('/Users/Arthur/Desktop/COVID-RA/state_data.xlsx')
df['Social Distancing Advisory'] = df['Social Distancing Advisory'].replace({
"sah": "1",
"sip": "0"
})https://stackoverflow.com/questions/61502845
复制相似问题