在python中以优化的方式对行进行迭代


# Import pandas library
import pandas as pd
# initialize list of lists
data = [['2016-01-02 11:23:04.299000+00:00', 10], ['2016-01-02 11:23:04.299000+00:00', 15], ['2016-01-02 11:23:04.299000+00:00', 14],['2016-01-02 11:23:04.299000+00:00', 10],['2016-01-02 11:23:04.299000+00:00', 10]
,['2016-01-02 11:23:04.299000+00:00', 10],['2016-01-02 11:23:04.299000+00:00', 10]]
df = pd.DataFrame(data, columns = ['time', 'sd'])
#df
time    sd
0   2016-01-02 11:23:04.299000+00:00    10
1   2016-01-02 11:23:04.299000+00:00    15
2   2016-01-02 11:23:04.299000+00:00    14
3   2016-01-02 11:23:04.299000+00:00    10
4   2016-01-02 11:23:04.299000+00:00    10
5   2016-01-02 11:23:04.299000+00:00    10
6   2016-01-02 11:23:04.299000+00:00    10

我需要对时间列进行操作,操作如下:

for i in range(len(df['time'])):
df.loc[i, 'time'] = pd.Timestamp(df['time'][i]).strftime('%Y-%m-%d %X')

这是我的解决方案。

现在的问题是:有没有其他的方法来做这个迭代操作?

因为我的数据框太大,交互操作在这里占用了时间。

谢谢。

您可以直接这样做,而无需手动遍历所有行:

df['time'] = pd.to_datetime(df['time']).dt.strftime('%Y-%m-%d %X')
print(df)
time  sd
0  2016-01-02 11:23:04  10
1  2016-01-02 11:23:04  15
2  2016-01-02 11:23:04  14
3  2016-01-02 11:23:04  10
4  2016-01-02 11:23:04  10
5  2016-01-02 11:23:04  10
6  2016-01-02 11:23:04  10

Pandas提供了一个将日期的Series转换为字符串的专用方法:pd.Series.dt.strftime()

df['time'] = df['time'].dt.strftime('%Y-%m-%d %X')

最新更新