gpt4 book ai didi

python - AssertionError : invalid dtype determination in get_concat_dtype when concatenating operation on list of Dataframes的解决方法

转载 作者:太空狗 更新时间:2023-10-29 22:03:31 27 4
gpt4 key购买 nike

我有一个 Dataframes 列表,我正尝试使用连接函数将它们组合起来。

dataframe_lists = [df1, df2, df3]

result = pd.concat(dataframe_lists, keys = ['one', 'two','three'], ignore_index=True)

完整的追溯是:

---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-198-a30c57d465d0> in <module>()
----> 1 result = pd.concat(dataframe_lists, keys = ['one', 'two','three'], ignore_index=True)
2 check(dataframe_lists)

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tools\merge.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, copy)
753 verify_integrity=verify_integrity,
754 copy=copy)
--> 755 return op.get_result()
756
757

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\tools\merge.py in get_result(self)
924
925 new_data = concatenate_block_managers(
--> 926 mgrs_indexers, self.new_axes, concat_axis=self.axis, copy=self.copy)
927 if not self.copy:
928 new_data._consolidate_inplace()

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\core\internals.py in concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy)
4061 copy=copy),
4062 placement=placement)
-> 4063 for placement, join_units in concat_plan]
4064
4065 return BlockManager(blocks, axes)

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\core\internals.py in <listcomp>(.0)
4061 copy=copy),
4062 placement=placement)
-> 4063 for placement, join_units in concat_plan]
4064
4065 return BlockManager(blocks, axes)

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\core\internals.py in concatenate_join_units(join_units, concat_axis, copy)
4150 raise AssertionError("Concatenating join units along axis0")
4151
-> 4152 empty_dtype, upcasted_na = get_empty_dtype_and_na(join_units)
4153
4154 to_concat = [ju.get_reindexed_values(empty_dtype=empty_dtype,

C:\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\core\internals.py in get_empty_dtype_and_na(join_units)
4139 return np.dtype('m8[ns]'), tslib.iNaT
4140 else: # pragma
-> 4141 raise AssertionError("invalid dtype determination in get_concat_dtype")
4142
4143

AssertionError: invalid dtype determination in get_concat_dtype

我认为错误在于其中一个数据框为空。我使用简单的函数 check 来验证并仅返回空数据帧的 header :

  def check(list_of_df):

headers = []
for df in dataframe_lists:
if df.empty is not True:
continue
else:
headers.append(df.columns)

return headers

我想知道是否可以使用此函数,如果在空数据帧的情况下,仅返回该空数据帧的 header 并将其附加到连接的数据帧。输出将是标题的单行(并且,在重复列名的情况下,只是标题的单个实例(如串联函数的情况)。我有两个样本数据源,onetwo 非空数据集。这是一个空的 dataframe

我希望生成的连接具有列标题...

 'AT','AccountNum', 'AcctType', 'Amount', 'City', 'Comment', 'Country','DuplicateAddressFlag', 'FromAccount', 'FromAccountNum', 'FromAccountT','PN', 'PriorCity', 'PriorCountry', 'PriorState', 'PriorStreetAddress','PriorStreetAddress2', 'PriorZip', 'RTID', 'State', 'Street1','Street2', 'Timestamp', 'ToAccount', 'ToAccountNum', 'ToAccountT', 'TransferAmount', 'TransferMade', 'TransferTimestamp', 'Ttype', 'WA','WC', 'Zip'

将空数据框的 header 附加到与该行一致的位置(如果它们是新的)。

 'A', 'AT','AccountNum', 'AcctType', 'Amount', 'B', 'C', 'City', 'Comment', 'Country', 'D', 'DuplicateAddressFlag', 'E', 'F' 'FromAccount', 'FromAccountNum', 'FromAccountT', 'G', 'PN', 'PriorCity', 'PriorCountry', 'PriorState', 'PriorStreetAddress','PriorStreetAddress2', 'PriorZip', 'RTID', 'State', 'Street1','Street2', 'Timestamp', 'ToAccount', 'ToAccountNum', 'ToAccountT', 'TransferAmount', 'TransferMade', 'TransferTimestamp', 'Ttype', 'WA','WC', 'Zip'

我欢迎有关执行此操作的最佳方法的反馈。

正如下面的答案所详述的,这是一个相当出乎意料的结果:

很遗憾,由于该 Material 的敏感性,我无法分享实际数据。导致要点中呈现的内容如下:

A= data[data['RRT'] == 'A'] #Select just the columns with  from the dataframe "data"
B= data[data['RRT'] == 'B']
C= data[data['RRT'] == 'C']
D= data[data['RRT'] == 'D']

对于每个新数据框,我然后应用此逻辑:

for column_name, column in A.transpose().iterrows():
AColumns= A[['ANum','RTID', 'Description','Type','Status', 'AD', 'CD', 'OD', 'RCD']] #get select columns indexed with dataframe, "A"

当我在空数据框 A 上执行绑定(bind)方法时:

AColumns.count

这是输出:

<bound method DataFrame.count of Empty DataFrame
Columns: [ANum,RTID, Description,Type,Status, AD, CD, OD, RCD]
Index: []>

最后,我导入了包含以下内容的 CSV:

data=pd.read_csv('Merged_Success2.csv', dtype=str, error_bad_lines = False, iterator=True,  chunksize=1000)
data=pd.concat([chunk for chunk in data], ignore_index=True)

我不确定我还能提供什么。串联方法适用于满足要求所需的所有其他数据帧。我还查看了 Pandas internals.py 和完整的跟踪。要么我有太多带有 NaN 的列、重复的列名或混合的数据类型(后者是最不可能的罪魁祸首)。

再次感谢您的指导。

最佳答案

在我们的一个项目中,我们遇到了同样的错误。经过调试我们发现了问题。我们的一个数据框有两列同名。重命名其中一列后,我们的问题就解决了。

关于python - AssertionError : invalid dtype determination in get_concat_dtype when concatenating operation on list of Dataframes的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32488417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com