Pandas 索引设置和向列中导入值
Pandas index setting and importing values to columns
我是 Python 的新手,正在努力完成我的爬虫项目。我有两个关于 few pandas 模块的问题。
下面是我的数据table"js"
apple banana
period
2017-01-01 100.00000 22.80130
2017-02-01 94.13681 16.28664
2017-03-01 85.34201 13.68078
2017-04-01 65.79804 9.77198
2017-05-01 43.32247 13.35504
2017-06-01 72.63843 9.44625
2017-07-01 78.82736 9.77198
2017-08-01 84.03908 10.09771
2017-09-01 90.55374 13.35504
2017-10-01 86.64495 9.12052
下面是我将苹果和香蕉值应用于新 DataFrame 的代码。
import pandas as pd
from datetime import datetime, timedelta
dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df = pd.DataFrame.set_index(dd) #this part has error
第一步是将我的 df 索引设置为 data_range('2017-01-01' 到昨天(每日))。错误消息说我缺少 1 个必需的位置参数:'keys'。是否可以将索引设置为从“2017-01-01”到昨天的每日日期?
解决后,我试图将我的 "js" 数据(例如 'apple' 和 'banana' 作为列,并将每个值与 df 索引日期相关联。此示例仅显示 'apple' 和 'banana' 列,但在我的真实数据集中,我还有数千个...
请告诉我解决问题的有效方法。提前致谢!
----------------编辑------------------------
日期索引与@COLDSPEED 答案完美配合。
dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df.index = pd.to_datetime(df.index) # ignore if not needed
df = df.reindex(dd, fill_value=0.0)
一个问题是,如果我有另一个数据框 "js2"(下图)并将这些数据合并到一个 df 中(上图),我相信它不会起作用。有什么建议吗?
kiwi mango
period
2017-01-01 9.03614 100.00000
2017-02-01 5.42168 35.54216
2017-03-01 7.83132 50.00000
2017-04-01 10.24096 55.42168
2017-05-01 10.84337 60.84337
2017-06-01 12.04819 65.66265
2017-07-01 17.46987 34.93975
2017-08-01 9.03614 30.72289
2017-09-01 9.63855 56.02409
2017-10-01 12.65060 45.18072
您可以使用 pd.to_datetime
和 pd.Timedelta
-
idx = pd.date_range('2017-01-01', pd.to_datetime('today') - pd.Timedelta(days=1))
idx
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
'2017-01-09', '2017-01-10',
...
'2017-11-18', '2017-11-19', '2017-11-20', '2017-11-21',
'2017-11-22', '2017-11-23', '2017-11-24', '2017-11-25',
'2017-11-26', '2017-11-27'],
dtype='datetime64[ns]', length=331, freq='D')
然后,您可以使用 reindex
您的数据框 -
df.index = pd.to_datetime(df.index) # ignore if not needed
df = df.reindex(idx, fill_value=0.0)
如果您的日期是日优先(日在先,然后是月),请确保在转换索引时指定 -
df.index = pd.to_datetime(df.index, dayfirst=True)
我是 Python 的新手,正在努力完成我的爬虫项目。我有两个关于 few pandas 模块的问题。
下面是我的数据table"js"
apple banana
period
2017-01-01 100.00000 22.80130
2017-02-01 94.13681 16.28664
2017-03-01 85.34201 13.68078
2017-04-01 65.79804 9.77198
2017-05-01 43.32247 13.35504
2017-06-01 72.63843 9.44625
2017-07-01 78.82736 9.77198
2017-08-01 84.03908 10.09771
2017-09-01 90.55374 13.35504
2017-10-01 86.64495 9.12052
下面是我将苹果和香蕉值应用于新 DataFrame 的代码。
import pandas as pd
from datetime import datetime, timedelta
dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df = pd.DataFrame.set_index(dd) #this part has error
第一步是将我的 df 索引设置为 data_range('2017-01-01' 到昨天(每日))。错误消息说我缺少 1 个必需的位置参数:'keys'。是否可以将索引设置为从“2017-01-01”到昨天的每日日期?
解决后,我试图将我的 "js" 数据(例如 'apple' 和 'banana' 作为列,并将每个值与 df 索引日期相关联。此示例仅显示 'apple' 和 'banana' 列,但在我的真实数据集中,我还有数千个...
请告诉我解决问题的有效方法。提前致谢!
----------------编辑------------------------ 日期索引与@COLDSPEED 答案完美配合。
dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df.index = pd.to_datetime(df.index) # ignore if not needed
df = df.reindex(dd, fill_value=0.0)
一个问题是,如果我有另一个数据框 "js2"(下图)并将这些数据合并到一个 df 中(上图),我相信它不会起作用。有什么建议吗?
kiwi mango
period
2017-01-01 9.03614 100.00000
2017-02-01 5.42168 35.54216
2017-03-01 7.83132 50.00000
2017-04-01 10.24096 55.42168
2017-05-01 10.84337 60.84337
2017-06-01 12.04819 65.66265
2017-07-01 17.46987 34.93975
2017-08-01 9.03614 30.72289
2017-09-01 9.63855 56.02409
2017-10-01 12.65060 45.18072
您可以使用 pd.to_datetime
和 pd.Timedelta
-
idx = pd.date_range('2017-01-01', pd.to_datetime('today') - pd.Timedelta(days=1))
idx
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
'2017-01-09', '2017-01-10',
...
'2017-11-18', '2017-11-19', '2017-11-20', '2017-11-21',
'2017-11-22', '2017-11-23', '2017-11-24', '2017-11-25',
'2017-11-26', '2017-11-27'],
dtype='datetime64[ns]', length=331, freq='D')
然后,您可以使用 reindex
您的数据框 -
df.index = pd.to_datetime(df.index) # ignore if not needed
df = df.reindex(idx, fill_value=0.0)
如果您的日期是日优先(日在先,然后是月),请确保在转换索引时指定 -
df.index = pd.to_datetime(df.index, dayfirst=True)