将值分配给Pandas中的datetime列/将datetime列重命名为日期列

时间:2018-02-27 22:30:42

标签: python-3.x pandas

Dataframe image

我在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分配给所有索引?

另外,如何重命名排除时间戳的日期时间列,只留下日期字段?

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。