我想更改在python中导入的数据的列值。我已经使用熊猫导入了excel工作簿。
Data=pd.read_excel(r"...\Report.xlsx")
我想编写一个函数来导入excel并更改列值(列名-名称)和值(必须将“ C”更改为“ A”,将“ E”更改为“ B”)。下表数据是示例表和数据。
Name Place
A UK
B Aus
C US
D AFR
E CHN
我的代码是
import pandas as pd
def read_csv(filename):
string_data = pd.read_excel(filename)
if 'C' in string_data['Name']:
string_data['Name'].replace('C','A',inplace=True)
if 'E' in string_data['Name']:
string_data['Name'].replace('E','B',inplace=True)
result=string_data.groupby(["Name"])["Place"].count().reset_index(name='result_count')
return result
此处的if条件无效,并且值未更改。我写错条件了吗?如何更改列值并带来结果?任何人都可以帮忙编写此功能
答案 0 :(得分:1)
这是一个已知的问题,inplace
替换对DataFrame列不起作用 ,因为您正在操作副本,并且什么也没有发生。
我建议您进行以下修复:
replace
。这是一个瓶颈,因此最好多次替换一次。inplace
,然后将结果分配回去。value_counts
代替groupby
+ count
。
string_data['Name'] = string_data['Name'].replace({'C' : 'A', 'E' : 'B'})
string_data['Name'].value_counts()
A 2
B 2
D 1
Name: Name, dtype: int64
为进一步优化,请注意value_counts
的输出比输入的 lot 小。
因此只需调用原始文件上的value_counts
,然后对结果执行replace
。
v = string_data['Name'].value_counts()
v.index = v.index.to_series().replace({'C' : 'A', 'E' : 'B'})
v.groupby(level=0).sum()
A 2
B 2
D 1
Name: Name, dtype: int64