我在当前阅读的书中发现了以下功能。我理解函数,但不理解为什么我们做data_mine['one'] = 1
以及为什么我们返回data_resampled.one
。您能向我解释作者这样做的原因吗?在这里您可以找到citibike.csv
def load_citibike():
data_mine = pd.read_csv('citibike.csv')
data_mine['one'] = 1
data_mine['starttime'] = pd.to_datetime(data_mine.starttime)
data_starttime = data_mine.set_index("starttime")
data_resampled = data_starttime.resample("3h").sum().fillna(0)
return data_resampled.one
citibike = load_citibike()
citibike.head()
plt.figure(figsize=(10, 3))
xticks = pd.date_range(start=citibike.index.min(), end=citibike.index.max(),
freq='D')
plt.xticks(xticks, xticks.strftime("%a %m-%d"), rotation=90, ha="left")
plt.plot(citibike, linewidth=1)
plt.xlabel("Date")
plt.ylabel("Rentals")
答案 0 :(得分:0)
data_mine['one'] = 1
将列的所有值-“一个”(如果已经存在)设为1。如果尚不存在,则只需在新列['one']
上附加所有值为1的列data_mine
。
希望这会使您更好地理解该功能。
答案 1 :(得分:0)
getContentLength()
和data_resampled
都是大熊猫的data_mine
。
如您所见here,您只能通过设置DataFrame
(或使用其他初始化方法)来创建新属性,但是一旦执行{{1} }。
答案 2 :(得分:0)
作者正在利用这样一个事实,当您groupby.func()
时,列名保持不变,尽管值会更改。
因此,在这种情况下,尽管列'one'
最初是全1的列,但返回的结果列是该3小时时段内的观测值总数。 (IMO,应更改名称以反映该列的真实含义。)
这是插图:
import pandas as pd
df = pd.DataFrame({'starttime': pd.date_range('2018-01-01', freq='15min', periods=20)})
df['one'] = 1
print(df.head())
# starttime one
#0 2018-01-01 00:00:00 1
#1 2018-01-01 00:15:00 1
#2 2018-01-01 00:30:00 1
#3 2018-01-01 00:45:00 1
#4 2018-01-01 01:00:00 1
df['starttime'] = pd.to_datetime(df.starttime)
df_starttime = df.set_index("starttime")
df_resampled = df_starttime.resample("3h").sum().fillna(0)
print(df_resampled)
# one
#starttime
#2018-01-01 00:00:00 12
#2018-01-01 03:00:00 8
顺便说一句,如果等效地写为
,该函数将更加清晰。def load_citibike():
df = pd.read_csv('citibike.csv')
df['starttime'] = pd.to_datetime(df.starttime)
return df.set_index('starttime').resample('3H').size().fillna(0)