这无疑反映了我缺乏知识,但我无法在网上找到任何帮助。我是编程新手。我想加载6个csvs并为它们做一些事情,然后再将它们组合起来。以下代码遍历每个文件,但只创建一个名为df
的数据框。
files = ('data1.csv', 'data2.csv', 'data3.csv', 'data4.csv', 'data5.csv', 'data6.csv')
dfs = ('df1', 'df2', 'df3', 'df4', 'df5', 'df6')
for df, file in zip(dfs, files):
df = pd.read_csv(file)
print(df.shape)
print(df.dtypes)
print(list(df))
答案 0 :(得分:1)
我认为你认为你的代码正在做一些它实际上并没有做的事情。
具体来说,这一行:onError
您可能会认为,在df = pd.read_csv(file)
循环的每次迭代中,正在执行和修改此行,for
替换为df
中的字符串,dfs
被替换文件名为file
。虽然后者是真的,但前者不是。
通过files
循环的每次迭代都会读取csv文件并将其存储在变量for
中,从而有效地覆盖在前一个df
循环期间读入的csv文件。换句话说,for
循环中的df
不会被您在for
中定义的变量名替换。
这里的关键点是,在执行代码时,字符串(例如dfs
,'df1'
等)无法替换并用作变量名。
实现所需结果的一种方法是将'df2'
读取的每个csv文件存储在字典中,其中键是数据帧的名称(例如pd.read_csv()
,'df1'
,等)和值是'df2'
返回的数据帧。
pd.read_csv()
然后,您可以像这样引用每个数据框:
list_of_dfs = {}
for df, file in zip(dfs, files):
list_of_dfs[df] = pd.read_csv(file)
print(list_of_dfs[df].shape)
print(list_of_dfs[df].dtypes)
print(list(list_of_dfs[df]))
您可以在此处详细了解字典:
https://docs.python.org/3.6/tutorial/datastructures.html#dictionaries
答案 1 :(得分:0)
字典也可以存储它们
import pandas as pd
from pprint import pprint
files = ('doms_stats201610051.csv', 'doms_stats201610052.csv')
dfsdic = {}
dfs = ('df1', 'df2')
for df, file in zip(dfs, files):
dfsdic[df] = pd.read_csv(file)
print(dfsdic[df].shape)
print(dfsdic[df].dtypes)
print(list(dfsdic[df]))
print(dfsdic['df1'].shape)
print(dfsdic['df2'].shape)
答案 2 :(得分:0)
使用字典存储DataFrame并按名称访问它们
files = ('data1.csv', 'data2.csv', 'data3.csv', 'data4.csv', 'data5.csv', 'data6.csv')
dfs_names = ('df1', 'df2', 'df3', 'df4', 'df5', 'df6')
dfs ={}
for dfn,file in zip(dfs_names, files):
dfs[dfn] = pd.read_csv(file)
print(dfs[dfn].shape)
print(dfs[dfn].dtypes)
print(dfs['df3'])
使用list存储DataFrame并通过索引访问它们
files = ('data1.csv', 'data2.csv', 'data3.csv', 'data4.csv', 'data5.csv', 'data6.csv')
dfs = []
for file in files:
dfs.append( pd.read_csv(file))
print(dfs[len(dfs)-1].shape)
print(dfs[len(dfs)-1].dtypes)
print (dfs[2])
不要存储中间数据框架,只需处理它们并添加到生成的DataFrame中。
files = ('data1.csv', 'data2.csv', 'data3.csv', 'data4.csv', 'data5.csv', 'data6.csv')
df = pd.DataFrame()
for file in files:
df_n = pd.read_csv(file)
print(df_n.shape)
print(df_n.dtypes)
# do you want to do
df = df.append(df_n)
print (df)
如果您将以不同方式处理它们,那么您不需要通用结构来存储它们。这样做只是独立的。
df = pd.DataFrame()
def do_general_stuff(d): #here we do common things with DataFrame
print(d.shape,d.dtypes)
df1 = pd.read_csv("data1.csv")
# do you want to with df1
do_general_stuff(df1)
df = df.append(df1)
del df1
df2 = pd.read_csv("data2.csv")
# do you want to with df2
do_general_stuff(df2)
df = df.append(df2)
del df2
df3 = pd.read_csv("data3.csv")
# do you want to with df3
do_general_stuff(df3)
df = df.append(df3)
del df3
# ... and so on
一种令人讨厌的方式,但不要问它是如何工作的:)
from collections import namedtuple
files = ['data1.csv', 'data2.csv', 'data3.csv', 'data4.csv', 'data5.csv', 'data6.csv']
df = namedtuple('Cdfs',
['df1', 'df2', 'df3', 'df4', 'df5', 'df6']
)(*[pd.read_csv(file) for file in files])
for df_n in df._fields:
print(getattr(df, df_n).shape,getattr(df, df_n).dtypes)
print(df.df3)