python - 从 Python 中的 year-mm-dd 行中切片年份
问题描述
我正在尝试在 pandas 数据框中切片一个大型对象类型列。此列中的所有日期均采用“year-mm-dd”格式,我想首先将其替换为“year”值,然后将其转换为数字列。
我尝试执行以下操作:
for i in range(len(df.index)):
df.age[i]=df.age[i][:4]
我直接收到警告和这样的错误:
/home/nbuser/anaconda3_501/lib/python3.6/site-packages/ipykernel/__main__.py:2:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-
docs/stable/indexing.html#indexing-view-versus-copy
from ipykernel import kernelapp as app
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-262-b01a66467d00> in <module>()
1 for i in range(len(df.index)):
----> 2 df.age[i]=df.age[i][:4]
IndexError: invalid index to scalar variable.
如果它有效,我想做的是然后使用以下方法将此列从对象转换为数字列:
df['age'] = pd.to_numeric(df['age'])
通过放置 .to_dict 提示符,我得到:
输入:df['age'].to_dict() 输出:{0: '1966-04-08', 1: '1965-05-14', 2: '1965-08-12', 3: '1968- 02-15', 4: '1968-08-08', ...} 我删掉了剩下的,因为有超过 16000 个值
另外,当我得到 dtype 时,我得到: 输入:df['age'].dtype 输出:dtype('O')
预先感谢您的帮助!
解决方案
您可以尝试以下两种方法之一:
df['age'] = df['age'].astype(str).str.split('-').str[0].astype(int)
df['age'] = df['age'].astype(str).str[:4].astype(int)
推荐阅读
- compilation - 共享对象文件如何与其他共享对象或常规对象链接以生成新的对象文件?
- python - 如何加快或完善 Google cloud-ndb 库中的上下文管理?
- xcode - SwiftUI 按钮的可触摸区域
- sql - 如何在 T-sql 中使用 sys.Table 中的名称来重新设置标识列
- javascript - 轮播箭头也会更改 div react.js 中的文本
- python - 为什么“或”操作会改变行为而不是两个单独的条件调用?
- pygame - Pygame 平滑运动
- typescript - TypeScript 为 Object 定义键和值可能与歧视联合
- laravel - 如何在laravel路由中处理可变数量的参数到控制器
- php - 如何在 Windows 10 上制作 PHP CLI 脚本“呼吁关注”?