首页 > 解决方案 > 在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

我是熊猫的新手,这可能会重复!请帮我找到解决方案。非常感谢。

标签: python-3.xpandas

解决方案


试试这个,我希望它会
首先删除列表括号,然后使用 .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']



推荐阅读