大熊猫列伪装重命名

时间:2018-12-27 02:20:19

标签: python pandas csv dataframe indexing

我有以下csv文件数据:

id,number,id
132605,1,1
132750,2,1

Pandas当前将其重命名为:

       id number id.1
0  132605      1    1
1  132750      2    1

是否可以自定义重命名的方式?例如,我希望:

           id number id2
0  132605      1    1
1  132750      2    1

2 个答案:

答案 0 :(得分:3)

rename:使用句点分隔符

假设重复的列标签是仅 实例,其中列名称包含句点(.),则可以对pd.DataFrame.rename使用自定义函数:

from io import StringIO

file = """id,number,id
132605,1,1
132750,2,1"""

def rename_func(x):
    if '.' not in x:
        return x
    name, num = x.split('.')
    return f'{name}{int(num)+1}'

# replace StringIO(file) with 'file.csv'
df = pd.read_csv(StringIO(file))\
       .rename(columns=rename_func)

print(df)

       id  number  id2
0  132605       1    1
1  132750       2    1

csv.reader:可靠的解决方案

使用标准库中的csv模块可以提供可靠的解决方案:

from collections import defaultdict
import csv

# replace StringIO(file) with open('file.csv', 'r')
with StringIO(file) as fin:
    headers = next(csv.reader(fin))

def rename_duplicates(original_cols):
    count = defaultdict(int)
    for x in original_cols:
        count[x] += 1
        yield f'{x}{count[x]}' if count[x] > 1 else x

df.columns = rename_duplicates(headers)

答案 1 :(得分:1)

简短答案

不。您无法更改通过pandas API添加后缀的方式。

好答案

这由pandas.read_csv的{​​{1}}选项处理,目前不支持将其关闭。

您可以做的是修改mangle_dupe_cols的源代码,但与往常一样,不建议这样做。

pandas.io.parsers._maybe_dedup_names