pandas concat()不会在相同列上进行连接

3
我有两个数据框,我正在尝试将它们连接起来。我确保它们具有相同数量的列,并且数据类型匹配。
然而,当调用pd.concat([df1, df2], ignore_index=True)时,我得到了一个带有24列和大量NaN值的数据框。我期望pd.concat()只是将第二个数据框“放在”第一个数据框下面(所以默认值;axis=0)。
我做错了什么?
>>> df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 798810 entries, 0 to 798809
Data columns (total 12 columns):
 #   Column  Non-Null Count   Dtype  
---  ------  --------------   -----  
 0   0       798810 non-null  Int64  
 1   1       798810 non-null  float64
 2   2       798810 non-null  float64
 3   3       798810 non-null  float64
 4   4       798810 non-null  float64
 5   5       798810 non-null  float64
 6   6       798810 non-null  Int64  
 7   7       798810 non-null  float64
 8   8       798810 non-null  Int64  
 9   9       798810 non-null  float64
 10  10      798810 non-null  float64
 11  11      798810 non-null  float64
dtypes: Int64(3), float64(9)
memory usage: 75.4 MB

>>> df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 12 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   0       500 non-null    Int64  
 1   1       500 non-null    float64
 2   2       500 non-null    float64
 3   3       500 non-null    float64
 4   4       500 non-null    float64
 5   5       500 non-null    float64
 6   6       500 non-null    Int64  
 7   7       500 non-null    float64
 8   8       500 non-null    Int64  
 9   9       500 non-null    float64
 10  10      500 non-null    float64
 11  11      500 non-null    float64
dtypes: Int64(3), float64(9)
memory usage: 48.5 KB

>>> pd.concat([df1, df2], ignore_index=True).shape
(799310, 24)
1个回答

3

我认为一个数据框中的列名不是数字,而是字符串,所以你可以尝试以下方式:

df1.columns = df1.columns.astype(int)
df2.columns = df2.columns.astype(int)

df = pd.concat([df1, df2], ignore_index=True)

或者:

df = pd.concat([df1.rename(columns=int), df2.rename(columns=int)], ignore_index=True)

2
你是对的;df1.columns 返回 Index(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'], dtype='object')df2.columns 返回 RangeIndex(start=0, stop=12, step=1)。将对象转换为整数可以解决这个问题。令人困惑的是,这在 .info() 中没有显示出来。 - gosuto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接