【问题标题】:Convert pandas column from object type [] in python 3在python 3中从对象类型[]转换熊猫列
【发布时间】:2019-11-05 08:39:51
【问题描述】:

我读过这个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

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

【问题讨论】:

  • df = df.replace([r"\['", r"'\]"], ['', ''], regex=True)开头,然后为所欲为。
  • 非常感谢!它符合我的预期。
  • 不客气!我建议删除您的问题,因为这是一个非常深奥的问题(主要是错误保存或加载数据的问题)。干杯。

标签: python-3.x pandas


【解决方案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']


【讨论】:

  • 对不起,这不起作用。 day_ 的结果是我尝试过的空 df
  • 所以我添加了一个我使用的数据框,它在这个数据框上工作
  • @cs95 你能解释一下它是怎么错的吗?我已经运行了这段代码并且它正在工作
  • 您认为该列是字符串列表是错误的。
  • @cs95 现在我已经更新了解决方案,以列表为即“['2016-01-01']”。请再次检查
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 2018-07-08
  • 2023-03-27
  • 2017-09-08
  • 2022-01-26
  • 2022-01-06
  • 2021-12-05
  • 2017-05-03
相关资源
最近更新 更多