連結機能を使用して結合しようとしているデータフレームのリストがあります。AssertionErrorの解決策:データフレームのリストで操作を連結するときのget_concat_dtypeでの無効なdtype決定
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
私はエラーがデータフレームの1つが空であるという事実にあると考えています。
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
空のデータフレームの場合には、それだけを返す場合は、この機能を使用することが可能である場合、私は疑問に思って:私は検証して、空のデータフレームのヘッダだけを返すために、単純な機能check
を使用しました空のデータフレームのヘッダを取得し、連結したデータフレームに追加します。出力はヘッダーの1行になります(繰り返し列名の場合は連結機能の場合と同じように)。oneとtwoの2つのサンプルデータソースがあります非空のデータ・セット。ここでは、空dataframeです。
私は結果CONCATENATEが列ヘッダーを持っていたいと思います...
'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'
空のデータフレームのヘッダがこれに伴い追加される持っています行(新しい場合)
'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'
これを行うための最良の方法についてのご意見を歓迎します。詳細下記の答えとして
、これはかなり予想外の結果である:残念ながら
、この材料の感度のために、私は実際のデータを共有することはできません。要旨に提示されているものに至るまでは、次のとおりです。私は、空のデータフレームにバインドされたメソッドを実行すると
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= 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']
私は、このロジックを適用:
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で列が多すぎるか、列名が重複しているか、またはdtypが混在しているか(後者はおそらく最小の原因です)。
ご指導いただきありがとうございます。
最小限の例の問題を実証することは有用であろう、それが空であるそのうちの一つ、いくつかの非常に小さなデータフレーム、であり、 1つの方法は、値の行を与えることによって空ではなくすることです。値の列は、生成された連結から削除することができます。 –
@TrisNefzger空のデータフレームと出力を追加しました。どうすればいい?それをダミー変数またはfillnaメソッドを使って埋めることで?さらに、その1つのインスタンスをどのように削除しますか? – ahlusar1989
あなたはどんなパンダのバージョンを使用していますか? – joris