将文件列表读入DataFrame列表

时间:2016-03-16 20:48:22

标签: python list pandas dataframe

我正在尝试将文件列表读入Python中的Pandas DataFrames列表。但是,下面的代码不起作用。

files = [file1, file2, file3]

df1 = pd.DataFrame()
df2 = pd.DataFrame()
df3 = pd.DataFrame()

dfs = [df1, df2, df3]

# Read in data files
for file,df in zip(files, dfs):
    if file_exists(file):
        with open(file, 'rb') as in_file:
            df = pd.read_csv(in_file, low_memory=False)
            print df        #the file is getting read properly

print df1    #empty
print df2    #empty
print df3    #empty

如果我将原始DataFrames作为DataFrames列表传递给for循环,如何更新?

4 个答案:

答案 0 :(得分:1)

在迭代它们时你没有处理列表元素本身但你在列表上操作。

您需要将元素(或附加它们)插入列表。一种可能性是:

files = [file1, file2, file3]

dfs = [None] * 3 # Just a placeholder

# Read in data files
for i, file in enumerate(files): # Enumeration instead of zip
    if file_exists(file):
        with open(file, 'rb') as in_file:
            dfs[i] = pd.read_csv(in_file, low_memory=False) # Setting the list element
            print dfs[i]      #the file is getting read properly

这会更新列表元素并且应该可以正常工作。

答案 1 :(得分:1)

您的代码似乎过于复杂,您可以这样做:

<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="css/form.css" />
</head>
<body>
<section>
            <form name="frm1">
                <label> Valeur 1:
                    <input type="text" name="tEx1" />
                </label>
                <label> Valeur 2:
                    <input type="text" name="tEx1" />
                </label>
                <label> Valeur 3:
                    <input type="text" name="tEx1" />
                </label>
                <label> Valeur 4:
                    <input type="text" name="tEx1" />
                </label>
            </form>
        </section>

        <section>
                <form name="frm2">
                <label> Somme:
                    <input type="text" name="tEx2" />
                </label>
                </form>
        </section>

        <section>
                <form name="frm3">
                <label>
                    <input type="button" 
                    value="bouton" 
                    name="btn1" /></br>
                </label>
                </form>
        </section>
</body>
</html>

您最终会得到一个dfs列表

答案 2 :(得分:1)

试试这个:

dfs = [pd.read_csv(f, low_memory=False) for f in files]

如果要检查文件是否存在:

import os

dfs = [pd.read_csv(f, low_memory=False) for f in files if os.path.isfile(f)]

如果你想将它们连接成一个数据框:

df = pd.concat([pd.read_csv(f, low_memory=False)
                for f in files if os.path.isfile(f)],
               ignore_index=True)

答案 3 :(得分:0)

您可以尝试list理解:

files = [file1, file2, file3]

dfs = [pd.read_csv(x, low_memory=False) for x in files if file_exists(x)]
相关问题