对字符串的自定义函数如何作用到列
因时间格式不一致,遇到类似‘20230101050505’的格式试了几个办法均无法直接转化到datetime,想着先str后做拆分规范格式,故设了一个自定义函数,转化格式,但是想不到该如何作用到整列。
数据假设如下:
import pandas as pd
data=[[4,7,20230102112349],
[5,8,20230301134456],
[6,9,20230408111111]]
df=pd.DataFrame(data,columns=['A','B','C'],index=list('abc'))
自定义了一个截取时间函数
def get_time(a):
return a[0:4]+'-'+a[4:6]+'-'+a[6:8]
想提问的是:
1.对单个有用,不知道该如何作用到新增列里面,比如df['D']如何调用该函数赋值;
2.对这类有没有其他简便办法。
import pandas as pd
def get_time(a):
temp = a['C'].astype("str")
return temp[0:4] + '-' + temp[4:6] + '-' + temp[6:8]
data=[[4,7,20230102112349],
[5,8,20230301134456],
[6,9,20230408111111]]
df = pd.DataFrame(data, columns=['A','B','C'], index=list('abc'))
df['C'] = df.apply(get_time, axis=1)
print(df)
有帮助的话,请点采纳该答案~
import pandas as pd
from datetime import datetime
def to_datetime(d: str) -> datetime:
return datetime(
int(d[:4]),
int(d[4:6]),
int(d[6:8]),
int(d[8:10]),
int(d[10:12]),
int(d[12:14])
)
data = [[4,7,20230102112349],
[5,8,20230301134456],
[6,9,20230408111111]]
data = [[d[0], d[1], to_datetime(str(d[2]))] for d in data]
df=pd.DataFrame(data,columns=['A','B','C'],index=list('abc'))
new_date_list = [20230102112349, 20230301134456, 20230408111111]
df['D'] = [to_datetime(d) for d in list(map(str, new_date_list))]
print(df)
希望可以帮助到你。