Python:使用pandas从csv文件中提取特定列(包含特殊字符)

Python:使用pandas从csv文件中提取特定列(包含特殊字符),python,csv,pandas,text-formatting,Python,Csv,Pandas,Text Formatting,我有一个文件(tests.txt),其中包含以下格式的数据: NUMBER,\tFilename,\t\t\t\t\tTestName,\t\t\t\tConfig 001,\t\tFile1.csv,\t\tcube,\t\twidth height size 002,\t\tFile2.csv,\t\tsquare,\t\tlength param 通常看起来像: HLM_TIER, Filename, TestName,

我有一个文件(tests.txt),其中包含以下格式的数据:

NUMBER,\tFilename,\t\t\t\t\tTestName,\t\t\t\tConfig
001,\t\tFile1.csv,\t\tcube,\t\twidth height size
002,\t\tFile2.csv,\t\tsquare,\t\tlength param
通常看起来像:

HLM_TIER,    Filename,                  TestName,               Config
001,         File1.csv,                 cube,                   width height size
002,         File2.csv,                 square,                 length param
我想从这个文件中提取一个特定的列(TestName)

已尝试的代码: 但是,我得到了以下错误:
回溯(最近一次呼叫最后一次):
文件“C:\Users\temp.py”,第23行,在
TestName=data.TestName
文件“C:\Python27\lib\site packages\pandas\core\generic.py”,第2246行,在\uuu getattr中__
(键入(自身)。\名称\名称)
AttributeError:“DataFrame”对象没有属性“TestName”
我认为错误是由于列中的制表符导致pandas将列读取为“\t\t\t\tTestName\” 但是,我不知道如何解决这个问题。
注意:我无法更改“tests.txt”文件。

您可以在读取数据时使用
转换器来剥离数据。为此,您需要创建一个执行此剥离的函数,然后需要将其传递到将列映射到函数的dict中

您还应该使用
names
参数手动指定列名,并跳过标题行

范例-

def strip(x):
    try:
        return x.strip()
    except AttributeError:
        return x

col_names = ['HLM_TIER', 'Filename', 'TestName', 'Config', ...]
col_mapping = {key:strip for key in col_names}
data = pd.read_csv('tests.txt', names=col_names, converters=col_mapping)

您是否可以删除所有选项卡:

from StringIO import StringIO

with open('test.txt', 'r') as f:
    df = pd.read_csv(StringIO(f.read().replace('\t', '')))
    df.TestName

如果还包含参数-skipinitialspace=True来读取_csv会发生什么?数据帧不是通过键,
data['TestName']
…@AnandSKumar访问的吗?它不起作用。尝试此“data=pd.read\u csv('performance\u tests.txt',skipinitialspace=True”。但是,没有更改。相同的错误或错误是否发生了更改?当您使用不需要条带的打印(data.columns)时,您得到了什么结果。更新了相关代码,请检查。唯一的更改是“skipinitialspace=True”,如建议的那样。让我试着复制您的issue@PrafulS检查最新更新,您需要使用
转换器
(或直接阅读csv后的其他处理)。您能解释更多您的答案吗?
def strip(x):
    try:
        return x.strip()
    except AttributeError:
        return x

col_names = ['HLM_TIER', 'Filename', 'TestName', 'Config', ...]
col_mapping = {key:strip for key in col_names}
data = pd.read_csv('tests.txt', names=col_names, converters=col_mapping)
from StringIO import StringIO

with open('test.txt', 'r') as f:
    df = pd.read_csv(StringIO(f.read().replace('\t', '')))
    df.TestName
df = pd.read_csv('Foo.txt', delim_whitespace=True)