【发布时间】:2016-03-01 00:10:02
【问题描述】:
我有一组数据帧,我正试图将它们变成一个面板。 这是我的代码:
# OPEN THE FILES INTO DATAFRAMES
filenames = ['Yahoo_2016-01-17.csv', 'Yahoo_2016-01-18.csv',
'Yahoo_2016-01-19.csv','Yahoo_2016-01-23.csv','Yahoo_2016-01-27.csv',
'Yahoo_2016-02-05.csv', 'Yahoo_2016-02-06.csv', 'Yahoo_2016-02-09.csv',
'Yahoo_2016-02-11.csv', 'Yahoo_2016-02-13.csv', 'Yahoo_2016-02-15.csv',
'Yahoo_2016-02-16.csv', 'Yahoo_2016-02-29.csv']
dates = np.array(['2016-01-17', '2016-01-18', '2016-01-19', '2016-01-23',
'2016-01-27', '2016-02-05', '2016-02-06','2016-02-09',
'2016-02-11', '2016-02-13', '2016-02-15', '2016-02-16',
'2016-02-29']).astype('datetime64[D]')
filepath = '/Users/RickS/Documents/Investing/Stock_files/GENERAL/'
dfs = [pd.read_csv(filepath+f) for f in filenames]
# Panel not working...
panel = pd.Panel(dict([(date, df) for date in dates for df in dfs]))
panel.swapaxes('major','minor')
但是,当我尝试读取面板时,每个数据帧中的所有值都变成了 NaN:
当我单独查看数据框时,它们看起来都很好。 这是导入 df 的 csv 文件之一: example_csv_file
需要注意的可能(或可能不)重要的一点是每个数据帧的 dtypes 并不完全相同:
In [24]: dfs[1].dtypes
Out[24]:
Name object
Symbol object
Previous_Close float64
Average_Daily_Volume int64
Change_&_Percent_Change object
Earnings/Share float64
EPS_Estimate_Current_Year float64
EPS_Estimate_Next_Quarter float64
EPS_Estimate_Next_Year float64
52-week_Low float64
52-week_High float64
EBITDA object
200-day_Moving_Average float64
P/E_Ratio float64
PEG_Ratio float64
Short_Ratio float64
1_yr_Target_Price float64
52-week_Range object
Date object
dtype: object
我做错了什么?
【问题讨论】:
-
有趣!如果您的示例是自包含的,那么帮助您会更容易——如果您提供了产生相同问题的示例数据。这个网站解释得更好:sscce.org
-
没有实际数据,我们无法重现。包含在
dict()中的列表理解存在问题,我几乎发布了答案,但在所有试验中,我无法重新创建所有 NaN。你的dates和filenames长度一样吗?此外,将其保存到字典dict([(date, df) for date in dates for df in dfs])并输出其内容。你看到 NaN 了吗? -
我编辑了问题以包含更多细节,包括更完整的代码和作为数据帧读取的 csv 文件之一。我测试了上面定义的字典——dict([(date, df) for date in dates for df in dfs])——结果很好(所有数据都在那里)。 “日期”和“文件名”的长度均为 13。
-
即使 DataFrame 中的列不相同,但 DataFrame 之间的列是否相同?即它们都有相同的列吗?
-
是的,它们在数据帧之间都是一样的
标签: python pandas dataframe panel nan