python-3.x - 在python 3中从对象类型[]转换熊猫列
问题描述
我读过这个Pandas: convert type of column和这个How to convert datatype:object to float64 in python? 我有df的当前输出:
Day object
Time object
Open float64
Close float64
High float64
Low float64
Day Time Open Close High Low
0 ['2019-03-25'] ['02:00:00'] 882.2 882.6 884.0 882.1
1 ['2019-03-25'] ['02:01:00'] 882.9 882.9 883.4 882.9
2 ['2019-03-25'] ['02:02:00'] 882.8 882.8 883.0 882.7
所以我不能使用这个:
day_=df.loc[df['Day'] == '2019-06-25']
我的最终目的是通过按特定条件过滤“Day”列的值来提取 df。我认为上面 df.loc 执行失败的原因是 Day 的 dtype 是对象所以我不能执行 df.loc 所以我尝试将上面的 df 转换为这样的东西:
Day Time Open Close High Low
0 2019-03-25 ['02:00:00'] 882.2 882.6 884.0 882.1
1 2019-03-25 ['02:01:00'] 882.9 882.9 883.4 882.9
2 2019-03-25 ['02:02:00'] 882.8 882.8 883.0 882.7
我努力了:
df=pd.read_csv('output.csv')
df = df.convert_objects(convert_numeric=True)
#df['Day'] = df['CTR'].str.replace('[','').astype(np.float64)
df['Day'] = pd.to_numeric(df['Day'].str.replace(r'[,.%]',''))
但它不适用于这样的错误:
ValueError: Unable to parse string "['2019-03-25']" at position 0
我是熊猫的新手,这可能会重复!请帮我找到解决方案。非常感谢。
解决方案
试试这个,我希望它会
首先删除列表括号,然后使用 .loc 进行过滤
df = pd.DataFrame(data={'Day':[['2016-05-12']],
'day2':[['2016-01-01']]})
df['Day'] = df['Day'].apply(''.join)
df['Day'] = pd.to_datetime(df['Day']).dt.date.astype(str)
days_df=df.loc[df['Day'] == '2016-05-12']
第二种解决方案
如果列表存储为字符串
from ast import literal_eval
df2 = pd.DataFrame(data={'Day':["['2016-05-12']"],
'day2':["['2016-01-01']"]})
df2['Day'] = df2['Day'].apply(literal_eval)
df2['Day'] = df2['Day'].apply(''.join)
df2['Day'] = pd.to_datetime(df2['Day']).dt.date.astype(str)
days_df=df2.loc[df2['Day'] == '2016-05-12']
推荐阅读
- python - 是否有一种 python 方法可以将多个单元格与条件合并
- html - 通过缩放出现 svg 中不想要的形状
- react-native - 在 react-native 中使用样式而不是 JSX 属性
- python - 为什么列表的输出不同?Python代码
- nginx - Dokku & Nginx - 连接到上游时连接失败(代码 111)
- python - RuntimeError:构建失败的尝试太多
- javascript - 使用jquery动态向img元素添加属性后,引导轮播不起作用
- vue.js - 带有标头的vuejs axios GET在Safari中不起作用
- java - yaml中的HikariCP连接泄漏检测
- javascript - 从 JSON 文件预加载自定义对象