2016-04-29 16 views
-2

私はマージした複数のCSVファイルがあります。しかし、マージするときに各ファイルの間に空白の行を追加する必要があります。そのため、その時点で別のファイルが開始されることがわかります。すべてを試しました。助けてください。マージされたファイルの間に空白行を追加する方法

import os 
import glob 
import pandas 

def concatenate(indir="C:\\testing", outfile="C:\\done.csv"): 
    os.chdir(indir) 
    fileList=glob.glob("*.csv") 
    dfList=[] 
    colnames=["Creation Date","Author","Tweet","Language","Location","Country","Continent"] 
    for filename in fileList: 
     print(filename) 
     df=pandas.read_csv(filename, header=None) 
     ins=df.insert(len(df),'\n') 
     dfList.append(ins) 

    concatDf=pandas.concat(dfList,axis=0) 
    concatDf.columns=colnames 
    concatDf.to_csv(outfile,index=None) 
+2

コードの書式を正しく設定してください直感的に、インデントは壊れています。これは、Pythonではショーストッパーです。 –

+0

私のコードは正常に動作しています。私が追加しようとしているのはただの空白行です。インデントが正しいとは思わないので、ダウンボートを取得することを意味しますか? – bonbon

+0

私はそれが間違っていると思うわけではなく、実際には間違っているからです(https://ideone.com/yuQgvL)。 4行目の関数にはボディがありません。 5行目からは、インデントのレベルが失われました。おそらくあなたの質問を書いていたときだけだったかもしれませんが、それは間違っているという事実を変えません。このように、この質問は品質に欠けています。私にはあなたがそれを書くのに十分な努力を費やさなかったと言われています。それが変わると、私は喜んで私の投票を再評価します。 –

答えて

1

次のスクリプト例です。 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がそれをファイル出力のようなルックスを生成するものです