我有一个文件(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 \ tt \ t \ t \ tTestName \” 但是,我不确定,如何解决这个问题。 注意:我无法更改“tests.txt”文件。
答案 0 :(得分:3)
您可以使用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)
答案 1 :(得分:1)
您可以删除所有标签:
from StringIO import StringIO
with open('test.txt', 'r') as f:
df = pd.read_csv(StringIO(f.read().replace('\t', '')))
df.TestName
答案 2 :(得分:0)
df = pd.read_csv('Foo.txt', delim_whitespace=True)