Python 熊猫用append创建新列

Python 熊猫用append创建新列,python,pandas,concat,Python,Pandas,Concat,我试图将多个文本文件编译成一个数据帧。但是,当我使用Concat函数连接数据帧时,生成的数据帧的形状会添加新的列。在下面的代码示例中,数据帧3有12列,而不是8列。为什么? **Input:** import pandas as pd df1 = pd.read_csv('2011-12-01-data.txt',sep = None, engine = 'python') df2 = pd.read_csv('2011-12-02-data.txt',sep = None, engine =

我试图将多个文本文件编译成一个数据帧。但是,当我使用Concat函数连接数据帧时,生成的数据帧的形状会添加新的列。在下面的代码示例中,数据帧3有12列,而不是8列。为什么?

**Input:**
import pandas as pd

df1 = pd.read_csv('2011-12-01-data.txt',sep = None, engine = 'python')
df2 = pd.read_csv('2011-12-02-data.txt',sep = None, engine = 'python')
df3= pd.concat([df1, df2])

print(df1.shape)
print(df2.shape)
print(df3.shape)

**Output:** 
df1 shape = (26986, 8)
df1 shape =(27266, 8)
df3 shape =(54252, 12)

我正在处理的航班数据位于

我想您需要默认列名称的
header=None
参数
0-7
,因为文件没有标题。如果有分隔符
选项卡
,也可以指定它

df1 = pd.read_csv('2011-12-01-data.txt',sep = '\t', engine = 'python', header=None)
df2 = pd.read_csv('2011-12-02-data.txt',sep = '\t', engine = 'python', header=None)
df3= pd.concat([df1, df2])

print(df1.shape)
print(df2.shape)
print(df3.shape)
(26987, 8)
(27267, 8)
(54254, 8)

print(df1.columns)
Int64Index([0, 1, 2, 3, 4, 5, 6, 7], dtype='int64')
print(df2.columns)
Int64Index([0, 1, 2, 3, 4, 5, 6, 7], dtype='int64')
print(df3.columns)
Int64Index([0, 1, 2, 3, 4, 5, 6, 7], dtype='int64')
另一种解决方案是为新列名指定
names
参数:

names= ['col1','col2','col3','col4','col5','col6','col7','col8']
df1 = pd.read_csv('2011-12-01-data.txt',sep = '\t', engine = 'python', names=names)
df2 = pd.read_csv('2011-12-02-data.txt',sep = '\t', engine = 'python', names=names)
df3= pd.concat([df1, df2])

print(df1.shape)
print(df2.shape)
print(df3.shape)
(26987, 8)
(27267, 8)
(54254, 8)

print(df1.columns)
print(df2.columns)
print(df3.columns)
Index(['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8'], dtype='object')
Index(['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8'], dtype='object')
Index(['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8'], dtype='object')

您只得到12列,因为两个数据帧的第一行中的一些值是相同的,所以从它们创建了列名称。在
concat之后
列仅对此列对齐。如果值不同,则没有对齐,得到的是
NaN
s

print(df1.columns)
Index(['aa', 'AA-1007-TPA-MIA', '12/01/2011 01:55 PM', '12/01/2011 02:07 PM',
       'F78', '12/01/2011 03:00 PM', '12/01/2011 02:57 PM', 'D5'],
      dtype='object')

print(df2.columns)
Index(['aa', 'AA-1007-TPA-MIA', '12/02/2011 01:55 PM', '12/02/2011 02:13 PM',
       'F78', '12/02/2011 03:00 PM', '12/02/2011 03:05 PM', 'D5'],
      dtype='object')

print(df3.columns)
Index(['12/01/2011 01:55 PM', '12/01/2011 02:07 PM', '12/01/2011 02:57 PM',
       '12/01/2011 03:00 PM', '12/02/2011 01:55 PM', '12/02/2011 02:13 PM',
       '12/02/2011 03:00 PM', '12/02/2011 03:05 PM', 'AA-1007-TPA-MIA', 'D5',
       'F78', 'aa'],
      dtype='object')



用户jezrael的回答解决了这个问题。但是,让我试着解释一下为什么pandas向连接的数据帧中添加了新列,以及出现了什么问题

误读标题 当设置header=None时,pandas将文件的第一行作为头读取,并在默认情况下将其设置为每列的名称。根据您的代码,如果header=None,则可以为每个数据帧获得两组列

df1: ['aa', “AA-1007-TPA-MIA”, “2011年1月12日下午1:55”, “2011年1月12日下午2:07”, ‘F78’, “2011年1月12日下午3:00”, “2011年1月12日下午2:57”, “D5”]

df2: ['aa', “AA-1007-TPA-MIA”, “2011年2月12日下午1:55”, “2011年2月12日下午2:13”, ‘F78’, “2011年2月12日下午3:00”, “2011年2月12日03:05下午”, “D5”]

附加了非唯一列 最后,当您连接这两个数据帧时,df1和df2不共有的所有列都作为单独的列追加。”aa’、‘aa-1007-TPA-MIA’、‘F78’和‘D5’是df1和df2独有的,而其他所有内容都附加到列列表中

这将导致4(df1和df2)+4(df1)+4(df2)=12列

print(df3.head())
  12/01/2011 01:55 PM       12/01/2011 02:07 PM       12/01/2011 02:57 PM  \
0                 NaN      12/1/2011 2:07PM EST      12/1/2011 2:51PM EST   
1                 NaN  12/1/11 2:06 PM (-05:00)  12/1/11 2:51 PM (-05:00)   
2                 NaN  12/1/11 2:06 PM (-05:00)  12/1/11 2:51 PM (-05:00)   
3                 NaN  12/1/11 2:06 PM (-05:00)  12/1/11 2:51 PM (-05:00)   
4                 NaN  12/1/11 2:06 PM (-05:00)  12/1/11 2:51 PM (-05:00)   

  12/01/2011 03:00 PM 12/02/2011 01:55 PM 12/02/2011 02:13 PM  \
0                 NaN                 NaN                 NaN   
1                 NaN                 NaN                 NaN   
2                 NaN                 NaN                 NaN   
3                 NaN                 NaN                 NaN   
4                 NaN                 NaN                 NaN   

  12/02/2011 03:00 PM 12/02/2011 03:05 PM  AA-1007-TPA-MIA   D5  F78  \
0                 NaN                 NaN  AA-1007-TPA-MIA  NaN  NaN   
1                 NaN                 NaN  AA-1007-TPA-MIA  NaN  NaN   
2                 NaN                 NaN  AA-1007-TPA-MIA  NaN  NaN   
3                 NaN                 NaN  AA-1007-TPA-MIA  NaN  NaN   
4                 NaN                 NaN  AA-1007-TPA-MIA  NaN  NaN   

                aa  
0   flightexplorer  
1  airtravelcenter  
2       myrateplan  
3      helloflight  
4        flytecomm 
print(df3.tail())
      12/01/2011 01:55 PM 12/01/2011 02:07 PM 12/01/2011 02:57 PM  \
27261                 NaN                 NaN                 NaN   
27262                 NaN                 NaN                 NaN   
27263                 NaN                 NaN                 NaN   
27264                 NaN                 NaN                 NaN   
27265                 NaN                 NaN                 NaN   

      12/01/2011 03:00 PM     12/02/2011 01:55 PM     12/02/2011 02:13 PM  \
27261                 NaN        Dec 02 - 10:20pm        Dec 02 - 10:23pm   
27262                 NaN             10:20pDec 2             10:23pDec 2   
27263                 NaN     2011-12-02 10:20 PM                     NaN   
27264                 NaN     2011-12-02 10:20 pm                     NaN   
27265                 NaN  2011-12-02 10:20PM CST  2011-12-02 10:31PM CST   

          12/02/2011 03:00 PM     12/02/2011 03:05 PM  AA-1007-TPA-MIA    D5  \
27261        Dec 02 - 11:59pm       Dec 02 - 11:51pm*  AA-2059-DFW-SLC    A3   
27262             11:43pDec 2                     NaN  AA-2059-DFW-SLC    A3   
27263     2011-12-02 11:59 PM                     NaN  AA-2059-DFW-SLC   NaN   
27264                     NaN                     NaN  AA-2059-DFW-SLC   NaN   
27265  2011-12-02 11:35PM MST  2011-12-02 11:43PM MST  AA-2059-DFW-SLC   A3    

         F78           aa  
27261  C20/C  travelocity  
27262    C20       orbitz  
27263    NaN      weather  
27264    C20          dfw  
27265   C20    flightwise