2017-10-26 12 views
1

Rには、環境内の名前に値を割り当てるassignという関数があります。Python:ディレクトリをループし、filenameをデータフレーム名としてfilenameを使用して保存する

EG:Pythonで

assign("Hello", 2) 
> Hello 
[1] 2 

私は同じことを行うように見えることはできません。私が最初に試した:

import numpy as np 
import pandas as pd 
import os 

for file in os.listdir('C:\\Users\\Olivia\\Documents'): 
    if file.endswith(".csv"): 
     os.path.splitext(file)[0] = pd.read_csv('C:\\Users\\Olivia\\Documents\\' + file) 

しかし、私は、これは動作しませんファイルと同じ文字列を作成しようとしている見ることができます。

私は実行して、リスト内のすべてのファイルを取得するために管理:

import glob 

dl = glob.glob(r'C:\Users\Olivia\Documents\*.csv') 
nl = [] 
for i in dl: 
    pl = i.split(os.sep) 
    name = pl[5][:-4] 
    nl.append(name) 

ddict = {} 

for k, v in zip(nl,dl): 
    ddict[k] = ddict.get(k,"") + v 

dfl = [] 

for k, v in ddict.items(): 
    dfl.append(read_csv(v)) 

をしかし、今どのように私は、リストの中から、各データフレームを取得し、拡張子のないファイルとして指定します。リスト内の各データフレームをファイルリストの名前として割り当てる方法が必要です

+0

私はhttps://stackoverflow.com/questions/30246620/how-to-create-separateからリストを得ました-pandas-dataframes-for-each-csv-file-and-them-them- – Olivia

答えて

2

正直なところ、あなたの最初の方法で正しい軌道に乗っていました。残念ながら、Pythonでは、あなたがすでに試して実感したように、「可変数の変数」を動的に作成するオプションはありません。 辞書を作成し、好きなようにデータフレームを文字列キーに割り当てることができます。方法は次のとおりです。単一データフレームを参照する

ddict['your_file_name'] 

注意すべきもう一つのと同じくらい簡単です、今

ddict = {os.path.splitext(file)[0] : pd.read_csv(os.path.join(root, file)) 
       for file in os.listdir(root) if file.endswith('csv') 
} 

root = 'C:\\Users\\Olivia\\Documents' 

ddict = {} 
for file in os.listdir(root): 
    if file.endswith(".csv"): 
     name = os.path.splitext(file)[0] 
     ddict[name] = pd.read_csv(os.path.join(root, file)) 

この辞書を構築するための別の方法はdictの理解を使用しています、安全なファイルを結合する方法はos.path.joinを使用しています。それは普通の+よりも安全です。


参照

+0

ブリリアント、最後には辞書がある個々のオブジェクトとしてすべてを取る?私はこれが効率的でなく不必要であることを知っていますが、それが簡単であれば好奇心が強いです。 – Olivia

+0

@Olivia本当に​​それはお勧めしませんが、可能です。 'globals()。update(ddict)'を使用しますが、これはコードの匂いにつながります。辞書の中に置く方が良いでしょう。 –

+1

@Olivia 'os.path.join'は、セパレータが存在しない場合は自動的に追加します。実際に文字列に連結したいのであれば(ファイルのサブパスを結合するのではなく)、 '+'を使用してください。さもなければ、サブパスに加わるためには、 'os.path.join'を使うのが良い習慣と考えられていて、それも移植可能です。 –

関連する問題