我正在尝试将文件列表读入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循环,如何更新?
答案 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)]