如何更改在Python中导入的数据的列值

时间:2018-08-20 19:19:05

标签: python pandas

我想更改在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条件无效,并且值未更改。我写错条件了吗?如何更改列值并带来结果?任何人都可以帮忙编写此功能

1 个答案:

答案 0 :(得分:1)

这是一个已知的问题,inplace替换对DataFrame列不起作用 ,因为您正在操作副本,并且什么也没有发生。

我建议您进行以下修复:

  1. 请勿多次致电replace。这是一个瓶颈,因此最好多次替换一次。
  2. 删除inplace,然后将结果分配回去。
  3. 使用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