我正在尝试将文本文件读入pandas,但它为所有行创建了所有的NaN。我试图使用分隔符来分解由\分隔的变量,但这不能正常工作。以下是数据文件在文本文件中的外观
数据:
Date Name Group Direction
2015-01-01 Smith.John - In
2015-01-01 Smith.Jan Claims Out
2015-01-01 - Claims In
2015-01-01 Smith.Jessica Other In
这是我第一次尝试阅读数据:
pd.read_csv('C:\Users\Desktop\skills.txt',
names=['Date','AgentName','Group','Direction'])
然而,这产生
Date AgentID AssignedWorkGroup CallDirection
0 Date\tAgentID\tAssignedWorkGroup\tCallDire... NaN NaN NaN
1 2015-09-01\Smith.John\t-\tIn NaN NaN NaN
所以我试图通过以下方式摆脱\:
pd.read_csv('C:\Users\Desktop\skills.txt',
names=['Date','AgentName','Group','Direction'],delimiter='\\')
但这仍然会产生相同的结果。所以有几件事。一个是我不能打破'\'。此外,看起来像读取的第一行是标题。我尝试使用header = None来摆脱它们,但这对我来说也不是很好。它似乎也是一个t(我假设文本?)放在每个变量前面
我觉得我正在接近这个错误的
答案 0 :(得分:2)
因为您传递了备用列名,这意味着csv解析器将第一行解释为有效数据行,因此您需要传递skiprows=1
以跳过标题,另外默认分隔符为逗号{{1但是看起来您的数据要么是制表符,要么是多空格分隔的,因此您可以传递,
或sep='\t'
。
目前还不清楚您的数据是标签还是空格分隔,但以下内容对我有用:
sep='\s+'
所以我希望
In [18]:
t="""Date Name Group Direction
2015-01-01 Smith.John - In
2015-01-01 Smith.Jan Claims Out
2015-01-01 - Claims In
2015-01-01 Smith.Jessica Other In"""
pd.read_csv(io.StringIO(t), names=['Date','AgentName','Group','Direction'], skiprows=1, sep='\s+')
Out[18]:
Date AgentName Group Direction
0 2015-01-01 Smith.John - In
1 2015-01-01 Smith.Jan Claims Out
2 2015-01-01 - Claims In
3 2015-01-01 Smith.Jessica Other In
或
pd.read_csv('C:\Users\Desktop\skills.txt', names=['Date','AgentName','Group','Direction'], skiprows=1, sep='\t')
为你工作
答案 1 :(得分:0)
使用空格作为分隔符工作:
df = pd.read_csv('C:\Users\Desktop\skills.txt', delim_whitespace=True)
df.columns = ['Date','AgentName','Group','Direction']
输出:
Date AgentName Group Direction
0 2015-01-01 Smith.John - In
1 2015-01-01 Smith.Jan Claims Out
2 2015-01-01 - Claims In
3 2015-01-01 Smith.Jessica Other In