Python2.7用用户输入重命名pandas列时输出格式异常怎么解决
解决方法
问题根源
- 你通过
raw_input获取的用户输入末尾残留了回车符\r:当列名包含换行、回车这类特殊控制字符时,pandas输出csv会自动对该列名加双引号转义,控制字符本身也会导致表头出现额外换行,和你观察到的"a\n"输出、命令行显示a\r的现象完全吻合 - 次要问题:你代码中的
os.path.normpath没有实际调用,路径标准化逻辑未生效
修复步骤
- 对所有用户输入的字符串调用
strip()方法,默认会自动移除首尾的空白、回车、换行、制表符等控制字符 - 可按需为
to_csv方法添加参数,控制输出格式避免不必要的转义 - 补充你需要的X/Y/Z列的重命名逻辑(原代码仅修改了W列)
修改后代码
import glob import os import pandas as pd import sys import csv from Tkinter import * import Tkinter, Tkconstants, tkFileDialog root = Tk() root.withdraw() root.filename = tkFileDialog.askdirectory(initialdir = "/",title = "Select directory") # 修正路径标准化逻辑 path = os.path.normpath(root.filename) all_files = glob.glob(os.path.join(path, "test*.txt")) full_df = pd.concat((pd.read_csv(f, sep=r'\t') for f in all_files), ignore_index=True) # 输入后加strip清理特殊控制符 material1 = str(raw_input("Please input first key ")).strip() material2 = str(raw_input("Please input second key ")).strip() material3 = str(raw_input("Please input third key ")).strip() material4 = str(raw_input("Please input fourth key ")).strip() # 补充四个列的重命名逻辑 full_df2 = full_df.rename(columns={ "W":material1, "X":material2, "Y":material3, "Z":material4 }) print full_df2 full_df.to_csv(r'full_df.txt', quoting=csv.QUOTE_NONE, encoding='utf-8') # 输出时指定不自动加引号,避免多余转义 full_df2.to_csv(r'full_df2.txt', quoting=csv.QUOTE_NONE, encoding='utf-8')
如果你的输出需要保持和输入一致的制表符分隔,可以给to_csv额外增加sep='\t'参数。
内容的提问来源于stack exchange,提问作者Screech
相关产品推荐
相关产品推荐

