pandas中某列数据为8days 08:37:15,dtype: timedelta64[ns]如何整列转换成小时分钟的格式
时间: 2024-10-10 09:05:22 浏览: 10
要将Pandas DataFrame中的`timedelta64[ns]`列转换为小时和分钟格式,你可以先提取出小时数和分钟数,然后组合成新的列。这里是操作步骤:
1. 导入所需的库并加载数据:
```python
import pandas as pd
# 假设你有一个名为df的DataFrame,其中包含timedelta列
data = pd.DataFrame({'time': pd.Series(['8 days 08:37:15', '1 day 12:45:00'])}, dtype='timedelta64[ns]')
```
2. 使用`str.split`函数按空格分割字符串,得到小时、分钟和秒:
```python
hours, minutes, _ = data['time'].astype(str).str.split(' ').tolist()
```
3. 转换小时和分钟为整数:
```python
hours = pd.to_numeric(hours, errors='coerce').fillna(0)
minutes = pd.to_numeric(minutes, errors='coerce').fillna(0)
```
4. 计算总分钟数(去掉小时部分,因为一天有24小时):
```python
total_minutes = (hours * 60 + minutes).astype(int)
```
5. 将结果添加到原始DataFrame的新列中:
```python
data['formatted_time'] = total_minutes
```
现在,`formatted_time`列将包含以分钟为单位的时间。
完整代码示例:
```python
import pandas as pd
data = pd.DataFrame({'time': pd.Series(['8 days 08:37:15', '1 day 12:45:00'])}, dtype='timedelta64[ns]')
hours, minutes, _ = data['time'].astype(str).str.split(' ').tolist()
hours = pd.to_numeric(hours, errors='coerce').fillna(0)
minutes = pd.to_numeric(minutes, errors='coerce').fillna(0)
total_minutes = (hours * 60 + minutes).astype(int)
data['formatted_time'] = total_minutes
print(data)
```
[^1]^ 注意:上述代码假设输入的时间格式始终为`'days hours:minutes:seconds'`的形式。如果有不同格式的输入,可能需要进一步的错误检查和处理。