将 append() 与 df.loc == 语句一起使用 Pandas Python
Posted
技术标签:
【中文标题】将 append() 与 df.loc == 语句一起使用 Pandas Python【英文标题】:Using append() with a df.loc == statement Pandas Python 【发布时间】:2018-07-30 21:48:58 【问题描述】:我希望在下面的代码中添加第二个条件,以便在文本之前附加一个字符串“Other”。我尝试将它分配给一个变量并在代码中调用它但没有成功。这样做的原因是,在创建报告时,我们可以调查同一可视化中的所有“其他”,而不是与主作业列分开
import pandas as pd
import os
os.chdir('/Users/')
df = pd.read_csv("file.csv", encoding = "ISO-8859-1")
df()
Job? Other
Hitman NaN
King NaN
Other Farmer
# Replace all 'Others with values from the other subsequent other column'
#Other columns dropped later on in code.
df.loc[df['Job?'] == 'Other', 'Are you?'] = df['If Other: Job?']
在此之前编写一个 for 语句以便稍后更改和使用切片会更好吗?如果是这样,会是这样吗?
for row in df.loc(["If Other"], axis=1):
df[row] = df[row].append("other ")
为更清晰而编辑:
我想要的是结果农夫显示为(或接近)
Job
Hitman
King
Other: Farmer
jezrael 的进一步编辑:
如果我有多个列如下
Job, Other_1, Position, Other_2, Education, Other_3,
A NaN A NaN A Nan
Other Farmer Other CEO Other Github
#a for loop like the following:
for row in df.loc(["Other_1", "Other_2", "Other_3"], axis=1):
df[row] = df[row].append("other ")
【问题讨论】:
预期输出是什么? 【参考方案1】:我相信您需要使用连接列按条件替换值:
df.loc[df['Job?'] == 'Other', 'Job?'] = df['Job?'] + ': ' + df['Other']
或者使用numpy.where
:
df['Job?'] = np.where(df['Job?'] == 'Other', df['Job?'] + ': ' + df['Other'], df['Job?'])
或者使用mask
:
df['Job?'] = df['Job?'].mask(df['Job?'] == 'Other', df['Job?'] + ': ' + df['Other'])
df = df.drop('Other', axis=1)
print (df)
Job?
0 Hitman
1 King
2 Other: Farmer
也可以添加自定义字符串,只删除df['Job?']
:
df['Job?'] = df['Job?'].mask(df['Job?'] == 'Other', 'ooother: ' + df['Other'])
#last remove column if necessary
df = df.drop('Other', axis=1)
print (df)
Job?
0 Hitman
1 King
2 ooother: Farmer
编辑:
我认为您可以创建dictionary
列并循环应用解决方案:
d = 'Job':'Other_1', 'Position':'Other_2', 'Education':'Other_3'
for k,v in d.items():
df[k] = df[k].mask(df[k] == 'Other', 'other: ' + df[v])
df = df.drop(list(d.values()), axis=1)
print (df)
Job Position Education
0 A A A
1 other: Farmer other: CEO other: Github
【讨论】:
你先生是我的大师,你能解释一下 .mask 在这种情况下的作用吗?完美运行!您能否解释一下我是否可以使用具有多个列名的 for 循环? (我认为这会使代码更干净)? @Datanovice - 欢迎您!所以掩码得到布尔掩码df['Job?'] == 'Other'
和True
的行(如果条件是True
)应用'ooother: ' + df['Other']
。对于您的第二个问题,您可以添加一些具有多列和预期输出的示例吗?谢谢。
重新编写了我的整个脚本,它运行良好。更优雅,你是男人!干杯。以上是关于将 append() 与 df.loc == 语句一起使用 Pandas Python的主要内容,如果未能解决你的问题,请参考以下文章