首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >连接数据帧会创建过多的列

连接数据帧会创建过多的列
EN

Stack Overflow用户
提问于 2019-06-26 02:06:47
回答 1查看 211关注 0票数 0

我正在使用一个循环读取一些csv文件,所有文件都有38列。我将它们全部添加到一个列表中,然后连接/创建一个数据帧。我的问题是,尽管所有这些csv文件都有38列,但我的结果数据帧最终却有105列。

截图如下:

如何才能使结果数据帧具有正确的38列,并将所有行堆叠在一起?

代码语言:javascript
复制
import boto3
import pandas as pd
import io

s3 = boto3.resource('s3')
client = boto3.client('s3')
bucket = s3.Bucket('alpha-enforcement-data-engineering')

appended_data = []

for obj in bucket.objects.filter(Prefix='closed/closed_processed/year_201'):
    print(obj.key)
    df = pd.read_csv(f's3://alpha-enforcement-data-engineering/{obj.key}', low_memory=False)
    print(df.shape)
    appended_data.append(df)

df_closed = pd.concat(appended_data, axis=0, sort=False)


print(df_closed.shape)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 02:28:56

TLDR;检查您的列标题。

代码语言:javascript
复制
c = appended_data[0].columns

df_closed = pd.concat([df.set_axis(
    c, axis=1, inplace=False) for df in appended_data], sort=False)

发生这种情况是因为您的列标题不同。DataFrames在垂直连接时会将DataFrames与标头对齐,并在没有标头的地方为Pandas插入空列。下面是一个说明性的例子:

代码语言:javascript
复制
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
df
   A  B
0  1  4
1  2  5
2  3  6

df2
   C   D
0  7  10
1  8  11
2  9  12

代码语言:javascript
复制
pd.concat([df, df2], axis=0, sort=False)

     A    B    C     D
0  1.0  4.0  NaN   NaN
1  2.0  5.0  NaN   NaN
2  3.0  6.0  NaN   NaN
0  NaN  NaN  7.0  10.0
1  NaN  NaN  8.0  11.0
2  NaN  NaN  9.0  12.0

创建4列。然而,你只想要两个。试一下,

代码语言:javascript
复制
df2.columns = df.columns
pd.concat([df, df2], axis=0, sort=False)

   A   B
0  1   4
1  2   5
2  3   6
0  7  10
1  8  11
2  9  12

它的工作方式与预期一致。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56759761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档