我有以下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
答案 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