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

Posted

技术标签:

【中文标题】Python:使用熊猫从csv文件中提取特定列(包含特殊字符)【英文标题】:Python: Extract a particular column(containing special characters) from csv file using pandas 【发布时间】:2015-10-20 13:22:25 【问题描述】:

我有一个文件(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)。

代码尝试:

import pandas as pd
data = pd.read_csv('tests.txt', skipinitialspace=True)
TestName = data.TestName
TestName = TestName.strip(' \t')

但是,我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\temp.py", line 23, in <module>
    TestName = data.TestName
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 2246, in __getattr__
    (type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'TestName'

我认为错误是由于列中的选项卡导致 pandas 将该列读取为“\t\t\t\t\tTestName \” 但是,我不确定如何解决这个问题。 注意:我无法更改“tests.txt”文件。

【问题讨论】:

如果您还包括参数 - skipinitialspace=True 到 read_csv 会发生什么? 不是数据帧通过键访问,data['TestName']... @AnandSKumar:它不起作用。试过这个“data = pd.read_csv('performance_tests.txt', skipinitialspace=True”。但是,没有变化。 同样的错误还是错误改变了? print(data.columns) 的结果是什么 当你使用时你不需要 strip . 【参考方案1】:

您可以在读入数据时使用converters 来剥离数据。为此,您需要创建一个执行此剥离的函数,然后您需要将其传递给将列映射到函数的 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)

【讨论】:

更新了有问题的代码,请检查。正如建议的那样,唯一的变化是“skipinitialspace=True”。 让我尝试重现您的问题 @PrafulS 查看最新更新,你需要使用converters(或者直接读入csv后的其他处理)。【参考方案2】:

你能去掉所有的标签吗:

from StringIO import StringIO

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

【讨论】:

【参考方案3】:
df = pd.read_csv('Foo.txt', delim_whitespace=True)

【讨论】:

你能解释一下你的答案吗?

以上是关于Python:使用熊猫从csv文件中提取特定列(包含特殊字符)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫在特定列中的csv文件中查找特定单词

从熊猫数据框中提取在特定列中具有特定值的所有行

使用 awk 或 perl 从 CSV 中提取特定列(解析)

如何更新python中熊猫数据框特定列中的所有行?

选择具有不同标头python的csv / df中的特定列

根据列值从熊猫数据框中提取行