次のスクリプト例です。 loc
メソッドを使用して、存在しないキーをenlarge the DataFrame
に設定し、新しい行の値を設定することができます。
最も簡単な解決策は、希望する値に設定されたセパレータとして使用するテンプレートDataFrame
を作成することです。次に、データフレームのリストに挿入して、適切な位置に連結します。
最後に、glob
は任意のパスで検索できるので、chdir
を削除しました。
import glob
import pandas
def concatenate(input_dir, output_file_name):
file_list=glob.glob(input_dir + "/*.csv")
column_names=["Creation Date"
, "Author"
, "Tweet"
, "Language"
, "Location"
, "Country"
, "Continent"]
# Create a separator template
separator = pandas.DataFrame(columns=column_names)
separator.loc[0] = [""]*7
dataframes = []
for file_name in file_list:
print(file_name)
if len(dataframes):
# The list is not empty, so we need to add a separator
dataframes.append(separator)
dataframes.append(pandas.read_csv(file_name))
concatenated = pandas.concat(dataframes, axis=0)
concatenated.to_csv(output_file_name, index=None)
print(concatenated)
concatenate("input", ".out.csv")
代替、さらに短い、方法はappend
方法を使用して、反復的に連結DataFrame
を構築することです。
def concatenate(input_dir, output_file_name):
file_list=glob.glob(input_dir + "/*.csv")
column_names=["Creation Date"
, "Author"
, "Tweet"
, "Language"
, "Location"
, "Country"
, "Continent"]
concatenated = pandas.DataFrame(columns=column_names)
for file_name in file_list:
print(file_name)
if len(concatenated):
# The list is not empty, so we need to add a separator
concatenated.loc[len(concatenated)] = [""]*7
concatenated = concatenated.append(pandas.read_csv(file_name))
concatenated.to_csv(output_file_name, index=None)
print(concatenated)
私は3つの入力CSVファイルでスクリプトをテストした:
入力/ 1.csv
Creation Date,Author,Tweet,Language,Location,Country,Continent
2015-12-17,foo,Hello,EN,London,UK,Europe
2015-12-18,bar,Bye,EN,Manchester,UK,Europe
2015-12-28,baz,Hallo,DE,Frankfurt,Germany,Europe
入力/ 2.csv
Creation Date,Author,Tweet,Language,Location,Country,Continent
2016-01-09,bar,Tweeeeet,EN,New York,USA,America
2016-01-09,cat,Miau,FI,Helsinki,Finland,Europe
入力/ 3.csv
Creation Date,Author,Tweet,Language,Location,Country,Continent
2018-12-12,who,Hello,EN,Delhi,India,Asia
私はそれを実行した場合は、次の出力がコンソールに書き込まれました:(CONCATを使用して)
コンソール出力
input\1.csv
input\2.csv
input\3.csv
Creation Date Author Tweet Language Location Country Continent
0 2015-12-17 foo Hello EN London UK Europe
1 2015-12-18 bar Bye EN Manchester UK Europe
2 2015-12-28 baz Hallo DE Frankfurt Germany Europe
0
0 2016-01-09 bar Tweeeeet EN New York USA America
1 2016-01-09 cat Miau FI Helsinki Finland Europe
0
0 2018-12-12 who Hello EN Delhi India Asia
より短いバリアントのコンソール出力はわずかに異なります(thのインデックスに注意してください最初の列)、これは生成されたCSVファイルには影響しません。
out.csv
Creation Date,Author,Tweet,Language,Location,Country,Continent
2015-12-17,foo,Hello,EN,London,UK,Europe
2015-12-18,bar,Bye,EN,Manchester,UK,Europe
2015-12-28,baz,Hallo,DE,Frankfurt,Germany,Europe
,,,,,,
2016-01-09,bar,Tweeeeet,EN,New York,USA,America
2016-01-09,cat,Miau,FI,Helsinki,Finland,Europe
,,,,,,
2018-12-12,who,Hello,EN,Delhi,India,Asia
:(APPENDを使用して)
コンソール出力
input\1.csv
input\2.csv
input\3.csv
Creation Date Author Tweet Language Location Country Continent
0 2015-12-17 foo Hello EN London UK Europe
1 2015-12-18 bar Bye EN Manchester UK Europe
2 2015-12-28 baz Hallo DE Frankfurt Germany Europe
3
0 2016-01-09 bar Tweeeeet EN New York USA America
1 2016-01-09 cat Miau FI Helsinki Finland Europe
6
0 2018-12-12 who Hello EN Delhi India Asia
は最後に、これはCSVがそれをファイル出力のようなルックスを生成するものです
コードの書式を正しく設定してください直感的に、インデントは壊れています。これは、Pythonではショーストッパーです。 –
私のコードは正常に動作しています。私が追加しようとしているのはただの空白行です。インデントが正しいとは思わないので、ダウンボートを取得することを意味しますか? – bonbon
私はそれが間違っていると思うわけではなく、実際には間違っているからです(https://ideone.com/yuQgvL)。 4行目の関数にはボディがありません。 5行目からは、インデントのレベルが失われました。おそらくあなたの質問を書いていたときだけだったかもしれませんが、それは間違っているという事実を変えません。このように、この質問は品質に欠けています。私にはあなたがそれを書くのに十分な努力を費やさなかったと言われています。それが変わると、私は喜んで私の投票を再評価します。 –