ディレクトリに複数のCSVファイルがあります。いくつかの列にはさらに多くの列が含まれています(ドロップすると問題ありません)。さまざまな列の複数のCSVファイルのレコードを重複排除する
これらのCSVファイル間でレコードを重複排除し、共通の列に縮小する優雅な方法はありますか?
現在、私はこれを達成するためにpython/pandasを使用します。すべてのファイルを1つのデータフレームにロードし、レコードが(filename)に由来する追加の列に書き留め、追加の列を削除してから最後にhttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html を使用してパンダの重複排除を行います。ディスクはfilename-identifierカラムに基づいています。
# ASSUMPTION: files are in order, first file defines minimum common columns
path = '.'
files_in_dir = [f for f in os.listdir(path)if f.endswith('csv')]
isFirst = True
for filenames in fs.find('*.csv', path):
df = pd.read_csv(filenames, error_bad_lines=False)
df['origin'] = fs.add_suffix(filenames, '_deduplicated')
if (isFirst):
isFirst = False
bigDf = df
else:
bigDf = pd.concat(bigDf, df, axis=0, join='inner')
cols_for_dup = [col for col in bigDf.columns if col not in ['origin']]
bigDf.duplicated(subset=cols_for_dup).sum()
bigDf.duplicated().sum()
bigDf_withoutNA = bigDf.drop_duplicates(keep='first', subset= cols_for_dup)
grouped = bigDf_withoutNA.groupby('origin')
for name, group in grouped:
#filename = 'path' + name
group.to_csv(path_or_buf= name, sep=';', decimal=',')
もっと簡単な方法がありますか?
データフレーム構造の例やファイルの内容を表示すると便利です。 –
が私のアプローチを追加しました。 –