将多个.csv文件中的数据导入单个DataFrame

时间:2017-10-19 14:00:23

标签: arrays pandas numpy dataframe glob

我无法将多个.csv文件中的数据转换为单个数组。我可以从.csv文件中获取所有数据,我只是无法将所有内容都放入一个简单的numpy数组中。每个.csv文件的名称对我来说都很重要,所以最后我想要一个Pandas DataFrame,其中的列标有.csv文件的初始名称。

import glob
import numpy as np
import pandas as pd

files = glob.glob("*.csv")

temp_dict = {}
wind_dict = {}

for file in files:
    data = pd.read_csv(file)
    temp_dict[file[:-4]] = data['HLY-TEMP-NORMAL'].values
    wind_dict[file[:-4]] = data['HLY-WIND-AVGSPD'].values

temp = []
wind = []
name = []

for word in temp_dict:
    name.append(word)
    temp.append(temp_dict[word])
for word in wind_dict:
    wind.append(wind_dict[word])

temp = np.array(temp)    
wind = np.array(wind)

当我打印临时或风时我得到这样的东西:

[array([ 32.1,  31.1,  30.3, ...,  34.9,  33.9,  32.9])
 array([ 17.3,  17.2,  17.2, ...,  17.5,  17.5,  17.2])
 array([ 41.8,  41.1,  40.6, ...,  44.3,  43.4,  42.6])
 ...
 array([ 32.5,  32.2,  31.9, ...,  34.8,  34.1,  33.7])]

当我真正想要的是:

[[ 32.1,  31.1,  30.3, ...,  34.9,  33.9,  32.9]
 [ 17.3,  17.2,  17.2, ...,  17.5,  17.5,  17.2]
 [ 41.8,  41.1,  40.6, ...,  44.3,  43.4,  42.6]
 ...
 [ 32.5,  32.2,  31.9, ...,  34.8,  34.1,  33.7]]

这不起作用,但是我的代码的目标:

df = pd.DataFrame(temp, columns=name)

当我尝试使用Pandas中的DataFrame时,每一行都是它自己的数组,这对它没用,因为它认为每一行都只有一个元素。我知道问题是“数组(...)”我只是不知道如何摆脱它。提前感谢您的时间和考虑。

1 个答案:

答案 0 :(得分:1)

我认为你可以使用:

files = glob.glob("*.csv")
#read each file to list of DataFrames
dfs = [pd.read_csv(fp) for fp in files]
#create names for each file
lst4 = [x[:-4] for x in files]
#create one big df with MultiIndex by files names
df = pd.concat(dfs, keys=lst4)

如果需要单独DataFrame更改解决方案上方的最后一行,请重新设置:

df = pd.concat(dfs, keys=lst4).unstack()

df_temp = df['HLY-TEMP-NORMAL']
df_wind = df['HLY-WIND-AVGSPD']