我在Pandas中创建了以下数据框'user_char':
## Create a new workbook User Char with empty datetime columns to import data from the ledger
user_char = all_users[['createdAt', 'uuid','gasType','role']]
## filter on consumers in the user_char table
user_char = user_char[user_char.role == 'CONSUMER']
user_char.set_index('uuid', inplace = True)
## creates datetime columns that need to be added to the existing df
user_char_rng = pd.date_range('3/1/2016', periods = 25, dtype = 'period[M]', freq = 'MS')
## converts date time index to a list
user_char_rng = list(user_char_rng)
## adds empty cols
user_char = user_char.reindex(columns = user_char.columns.tolist() + user_char_rng)
user_char
我尝试使用以下命令为突出显示的列指定值:
user_char['2016-03-01 00:00:00'] = 1
但这会不断创建新列,而不是编辑现有列。如何在不添加新列的情况下将值1分配给所有索引?
另外,如何重命名排除时间戳的日期时间列,只留下日期字段?
答案 0 :(得分:0)
尝试
user_char.loc[:, '2016-03-01'] = 1
因为您的列索引是DatetimeIndex
,所以pandas足够聪明,可以将字符串'2016-03-01'
转换为日期时间格式。使用loc[c]
似乎暗示pandas首先在索引中查找c
,而不是创建名为c
的新列。
附注:时间序列数据的DatetimeIndex通常用作DataFrame的(行)索引,而不是列。 (当然,没有技术上的原因你不能在列中使用时间!)根据我的经验,大多数PyData堆栈都是为了期望“tidy data”而构建的,其中每个变量(如时间)形成一个列,每个观察(时间戳值)形成一行。按照您的方式进行操作,例如,在调用plot()
之前,您需要转置DataFrame。