我已经阅读了此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']
我的最终目的是通过按特定条件过滤“天”列的值来提取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
我是熊猫的新手,可能会重复! 请帮我找到解决方案。非常感谢。
答案 0 :(得分:1)
尝试此方法,希望它能起作用
首先按天删除列表括号,然后使用.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']