我有 DataFrame,其中一列包含行中的字典,格式为:
rates
0 {'time': '2022-06-05T19:25:57.3000000Z', 'asset_id_quote': '0X', 'rate': 73571.98764837519}
1 {'time': '2022-06-05T19:25:57.3000000Z', 'asset_id_quote': '18C', 'rate': 11607635.869234081}
2 {'time': '2022-06-05T19:25:57.3000000Z', 'asset_id_quote': '1EARTH', 'rate': 4162937.862828232}
3 {'time': '2022-06-05T19:25:57.3000000Z', 'asset_id_quote': '1ECO', 'rate': 7337.697146675354}
4 {'time': '2022-06-05T19:25:57.3000000Z', 'asset_id_quote': '1INCH', 'rate': 34645.31024605586}
... ...
4917 {'time': '2022-06-05T19:25:07.1000000Z', 'asset_id_quote': 'SEK', 'rate': 291937.0479618742}
4918 {'time': '2022-06-05T19:25:07.1000000Z', 'asset_id_quote': 'SGD', 'rate': 41146.239317767526}
4919 {'time': '2022-06-05T19:25:07.1000000Z', 'asset_id_quote': 'THB', 'rate': 1026548.5675256335}
4920 {'time': '2022-06-05T19:25:07.1000000Z', 'asset_id_quote': 'TRY', 'rate': 495117.01581884566}
4921 {'time': '2022-06-05T19:25:07.1000000Z', 'asset_id_quote': 'ZAR', 'rate': 463779.32985313266}
我如何在循环中解析它,以便从中删除字母
T
和 Z
并将格式更改为 yyyy-mm-dd hh:mm:ss
?
我尝试过:
def change_columns_format(self, column_in_df1):
df = self.getting_response_and_df()
for i in column_in_df1:
for x in i:
x = [x[:19].replace("T", " ") for x in i]
print (i)
return df
但这当然是错误的。
这是如何使用 extract 和 regex 提取时间
模式中的假设是时间将显示为“'time':'2022-06-05T19:25:07.1000000Z'”
df['time'] = df['dict'].str.extract(r"(time': ')(.*)(Z)")[1]
使用正则表达式删除 T 和 Z 这是一个例子
df['time'].str.replace(r'[T|Z]',' ', regex=True)
结果
time 2022-06-05 19:25:57.3000000
或
df['time'].astype('datetime64')
结果
time 2022-06-05 19:25:57.300
或
df['time'].astype('datetime64').dt.strftime('%Y-%m-%d %H:%M:%S')
结果
time 2022-06-05 19:25:57
您可以使用
pd.json_normalize
从 rates
列创建数据框,然后修复格式,最后使用 to_dict
重新创建字典:
df['rates'] = (pd.json_normalize(df['rates'])
.assign(time=lambda x: x['time'].str[:-1].str.replace('T', ' '))
.to_dict('records'))
print(df)
# Output
rates
0 {'time': '2022-06-05 19:25:57.3000000', 'asset_id_quote': '0X', 'rate': 73571.98764837519}
1 {'time': '2022-06-05 19:25:57.3000000', 'asset_id_quote': '18C', 'rate': 11607635.869234081}
2 {'time': '2022-06-05 19:25:57.3000000', 'asset_id_quote': '1EARTH', 'rate': 4162937.862828232}
3 {'time': '2022-06-05 19:25:57.3000000', 'asset_id_quote': '1ECO', 'rate': 7337.697146675354}
4 {'time': '2022-06-05 19:25:57.3000000', 'asset_id_quote': '1INCH', 'rate': 34645.31024605586}
4917 {'time': '2022-06-05 19:25:07.1000000', 'asset_id_quote': 'SEK', 'rate': 291937.0479618742}
4918 {'time': '2022-06-05 19:25:07.1000000', 'asset_id_quote': 'SGD', 'rate': 41146.239317767526}
4919 {'time': '2022-06-05 19:25:07.1000000', 'asset_id_quote': 'THB', 'rate': 1026548.5675256335}
4920 {'time': '2022-06-05 19:25:07.1000000', 'asset_id_quote': 'TRY', 'rate': 495117.01581884566}
4921 {'time': '2022-06-05 19:25:07.1000000', 'asset_id_quote': 'ZAR', 'rate': 463779.32985313266}