2017-06-21 25 views
0

フォルダ内の複数のCSVファイルから2番目のカラムをコピーして、それを1つのCSVファイルに保存する前にテキストを追加するスクリプトを作成します。ここカラムをコピーし、テキストを追加して新しいCSVファイルに書き込む

は私が何をしたいです:

1)すべてのCSVファイル

2から2列目につかまりデータ)開始時に、各列にテキスト「こんにちは」&「歓迎」を追加そして、私はパンダに

import os 
import pandas as pd 
dataframes = [pd.read_csv(p, index_col=2, header=None) for p in ('1.csv','2.csv','3.csv')] 
merged_dataframe = pd.concat(dataframes, axis=0) 
merged_dataframe.to_csv("all.csv", index=False) 
を使用して、それを作成しようとした

3)単一のファイルにデータを書き込み

を終了

問題がある - 上記のコードで

  1. 私は非常に困難である手動でファイル名を言及することを強制しています、解決策として、私はすべてのCSVファイルをインクルードする必要があり*.csv

  2. 使用する必要があります何かのようにwritr.writerow(("Hello"+r[1]+"welcome"))

  3. 私は同様に高速化する必要があるので、各ファイルに多くの行(約100k)で複数のcsvファイルがあります。ここで

は、CSVファイルのサンプルです:

"1.csv"  "2.csv"   "3.csv" 
    a,Jac   b,William   c,James 

そして、ここでは、私がall.csv見て出力を希望する方法である:

Hello Jac welcome 
Hello William welcome 
Hello James welcome 

.merge().append()を使用して任意のソリューションまたは.concat() ??

これをどのようにしてPythonで実現できますか?

+0

こんにちは。 'glob = glob.glob( 'foo/*。csv')'のようにモジュールglobを使ってすべてのcsvファイルを得ることができます。 –

答えて

2

これにはパンダは必要ありません。ここでは、フォルダ内のすべての.csvファイルをインポートしたい場合、あなただけのテキストを追加するには)

for i in [a in os.listdir() if a[-4:] == '.csv']: 
    #code to read in .csv file and concatenate to existing dataframe 

2を使用することができます)csv

import csv 
import glob 


with open("path/to/output", 'w') as outfile: 
    for fpath in glob.glob('path/to/directory/*.csv'): 
     with open(fpath) as infile: 
      for row in csv.reader(infile): 
       outfile.write("Hello {} welcome\n".format(row[1])) 
+0

は仕事をスピードアップしないでしょうか? – Nancy

+0

@Nancy:私は確実に言うことはできませんが、このアプリケーションではPandasのスピードアップを "十分に"得られるとは思っていません。あなたはまだ出力を書くことでボトルネックになっています – inspectorG4dget

0

1でこれを行うのは本当に簡単な方法ですファイルに書き込む場合は、データフレームの列2の各要素に関数をマップしてテキストを追加することができます。

#existing dataframe called df 
df[df.columns[1]].map(lambda x: "Hello {} welcome".format(x)).to_csv(<targetpath>) 
#replace <targetpath> with your target path 

あなたはto_csvに渡すことができるすべての様々なパラメータのためhttp://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.Series.to_csv.htmlを参照してください。

0

ここにはcsvモジュールを組み込んだノンパンダソリューションがあります。速度については不明。

import os 
import csv 

path_to_files = "path to files" 
all_csv = os.path.join(path_to_files, "all.csv") 
file_list = os.listdir(path_to_files) 

names = [] 

for file in file_list: 
    if file.endswith(".csv"): 
     path_to_current_file = os.path.join(path_to_files, file) 

     with open(path_to_current_file, "r") as current_csv: 
      reader = csv.reader(current_csv, delimiter=',') 

      for row in reader: 
       names.append(row[1]) 

with open(all_csv, "w") as out_csv: 
    writer = csv.writer(current_csv, delimiter=',') 

    for name in names: 
     writer.writerow(["Hello {} welcome".format(name)) 
関連する問題