Python 如何用长索引连接多个数据帧而不出错?

Python 如何用长索引连接多个数据帧而不出错?,python,pandas,dataframe,concat,valueerror,Python,Pandas,Dataframe,Concat,Valueerror,我有一个目录“../dados”,其中有多个子目录,其名称是序列号加上一些无用的信息-例如“17448_2017_Jul_2017_Oct”,其中第一个数字是序列号。在每个子目录中,我有四个“.txt”文件,其行/行包含日期和时间信息,以及特定类型的属性,例如湿度,在每个子目录中都以相同的方式命名-例如“2019-01-29 03:11:26 54.7” 我想连接所有这些数据,以便生成一个带有日期索引的数据集 path = "/.../dados/" df = pd.DataFrame()

我有一个目录“../dados”,其中有多个子目录,其名称是序列号加上一些无用的信息-例如“17448_2017_Jul_2017_Oct”,其中第一个数字是序列号。在每个子目录中,我有四个“.txt”文件,其行/行包含日期和时间信息,以及特定类型的属性,例如湿度,在每个子目录中都以相同的方式命名-例如“2019-01-29 03:11:26 54.7”

我想连接所有这些数据,以便生成一个带有日期索引的数据集

path = "/.../dados/"

df = pd.DataFrame()

for fld in os.listdir(path):
    subfld = path + fld
    if os.path.isdir(subfld):
        aux = pd.DataFrame()
        sn = fld.split('_')[0]
        for file in os.listdir(subfld):
            filepath = os.path.join(subfld, file)
            if os.path.isfile(filepath):
                new_col = pd.read_fwf(filepath, colspecs=[(0, 19), (20, -1)], skiprows=8, names=[file.split('_')[2][:-4]], parse_dates=[0], nrows=9999999)
                aux = pd.concat([aux, new_col], axis=1,  sort=False)
        aux['Machine'] = sn
        df = df.append(aux)
这是测向头(10)的打印:

这是我收到的错误消息:

...
line 31, in <module>
    aux = pd.concat([aux, new_col], axis=1,  sort=False)

  File ".../concat.py", line 226, in concat
    return op.get_result()

  File ".../concat.py", line 423, in get_result
    copy=self.copy)

  File ".../internals.py", line 5425, in concatenate_block_managers
    return BlockManager(blocks, axes)

  File ".../internals.py", line 3282, in __init__
    self._verify_integrity()

  File ".../internals.py", line 3493, in _verify_integrity
    construction_error(tot_items, block.shape[1:], self.axes)

  File ".../internals.py", line 4843, in construction_error
    passed, implied))

ValueError: Shape of passed values is (2, 19687), indices imply (2, 19685)
。。。
第31行,在
aux=pd.concat([aux,new_col],轴=1,排序=False)
文件“../concat.py”,第226行,在concat中
返回操作获取结果()
文件“../concat.py”,第423行,在get_结果中
复制=自我复制)
文件“../internals.py”,第5425行,位于连接块管理器中
返回块管理器(块、轴)
文件“../internals.py”,第3282行,在_init中__
自我验证完整性()
文件“../internals.py”,第3493行,在_verify_integrity中
构造错误(总项目、块形状[1]、自轴)
文件“../internals.py”,第4843行,结构错误
通过,暗示)
ValueError:传递值的形状为(2199687),索引暗示为(2199685)

您的数据帧的形状不兼容:

ValueError: Shape of passed values is (2, 19687), indices imply (2, 19685)

换句话说,问题是19687!=19685无论你遇到什么样的答案,都将来自于你的数据的细节,考虑到数据的大小,这可能是不现实的。您至少需要在某处添加或删除2行。您需要进行调查以确定数据帧的内容和位置。

您的数据帧的形状不兼容:

ValueError: Shape of passed values is (2, 19687), indices imply (2, 19685)

换句话说,问题是19687!=19685无论你遇到什么样的答案,都将来自于你的数据的细节,考虑到数据的大小,这可能是不现实的。您至少需要在某处添加或删除2行。您需要调查以确定什么和在哪里。

似乎您在错误的轴上使用了
pd.concat
。从
pd.concat..
行中删除
axis=1
,因为可以在

只是为了方便你。要获得更清晰的数据帧,请同时使用
ignore\u index=True

aux = pd.concat([aux, new_col], ignore_index=True,  sort=False)

这将返回一个重置索引。

似乎您在错误的轴上使用了
pd.concat
。从
pd.concat..
行中删除
axis=1
,因为可以在

只是为了方便你。要获得更清晰的数据帧,请同时使用
ignore\u index=True

aux = pd.concat([aux, new_col], ignore_index=True,  sort=False)

这将返回一个重置索引。

您的问题是什么?@Erfan我如何解决此错误…您是否尝试通过谷歌搜索错误消息?我就这么做了,我得到的点击率超过了我的计数。在较高级别上,一个数据帧中有19687列,另一个数据帧中有19685列,表示两列之差。因此,无法连接数据帧。您可能有重复的索引值。尝试:
df.drop_duplicates(inplace=True)
然后删除
pd.concat
行中的
axis=1
,您的问题是什么?@Erfan我如何解决此错误…您尝试过用谷歌搜索错误消息吗?我就这么做了,我得到的点击率超过了我的计数。在较高级别上,一个数据帧中有19687列,另一个数据帧中有19685列,表示两列之差。因此,无法连接数据帧。您可能有重复的索引值。尝试:
df.drop_duplicates(inplace=True)
然后删除你的
pd.concat
行中的
axis=1
考虑到差异是2,可能性是你的头和可能的尾。考虑到差异是2,可能性是你的头和可能的尾。很高兴我能提供帮助,又增加了一个提示,如果你喜欢,你可以测试@MarlonHenriqueTeixeira很高兴我能帮忙,又增加了一个提示,如果你喜欢,你可以测试@MarlonHenriqueTeixeira