使用Pandas使用分隔符读取txt文件会创建NaNs列

时间:2015-11-03 21:42:55

标签: pandas text import

我正在尝试将文本文件读入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(我假设文本?)放在每个变量前面

我觉得我正在接近这个错误的

2 个答案:

答案 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