将多个 .csv 文件中的数据导入单个 DataFrame
Importing data from multiple .csv files into single DataFrame
我无法将多个 .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)
当我打印 temp 或 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 时,每一行都是它自己的数组,这没有用,因为它认为每一行中只有元素。我知道问题出在 "array(...)" 我只是不知道如何摆脱它。预先感谢您的时间和考虑。
我认为你可以使用:
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
s 更改上面解决方案的最后一行并重塑:
df = pd.concat(dfs, keys=lst4).unstack()
df_temp = df['HLY-TEMP-NORMAL']
df_wind = df['HLY-WIND-AVGSPD']
我无法将多个 .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)
当我打印 temp 或 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 时,每一行都是它自己的数组,这没有用,因为它认为每一行中只有元素。我知道问题出在 "array(...)" 我只是不知道如何摆脱它。预先感谢您的时间和考虑。
我认为你可以使用:
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
s 更改上面解决方案的最后一行并重塑:
df = pd.concat(dfs, keys=lst4).unstack()
df_temp = df['HLY-TEMP-NORMAL']
df_wind = df['HLY-WIND-AVGSPD']