熊猫数字返回NaN

时间:2018-06-13 07:05:55

标签: python pandas

我有一个pandas数据帧,例如:

mydf.head()

    Date        Merchant/Description Debit/Credit
0   10/05/2018  FAKE TRANSACTION 1  -£7.50
1   09/05/2018  FAKE TRANSACTION 2  -£5.79
2   09/05/2018  FAKE TRANSACTION 3  -£28.50
3   08/05/2018  FAKE TRANSACTION 4  -£3.99
4   08/05/2018  FAKE TRANSACTION 5  -£17.99

列['借记/贷记']具有数据类型' object&#39 ;;它是字符串和NaN的混合物。

我希望将字符串转换为数字。我使用pandas.to_numeric来尝试实现这个目标:

    cols = ['Debit/Credit']
    hsbcraw[cols] = hsbcraw[cols].apply(pd.to_numeric, errors='coerce')

这会将['借记/贷记']列中的所有项目转为NaN:

mydf.head()

    Date        Merchant/Description Debit/Credit
0   10/05/2018  FAKE TRANSACTION 1   NaN
1   09/05/2018  FAKE TRANSACTION 2   NaN
2   09/05/2018  FAKE TRANSACTION 3   NaN
3   08/05/2018  FAKE TRANSACTION 4   NaN
4   08/05/2018  FAKE TRANSACTION 5   NaN

我的代码或方法有什么错误?

3 个答案:

答案 0 :(得分:3)

在转换为£之前,需要空字符串replace numeric

hsbcraw[cols]=hsbcraw[cols].replace('£','', regex=True).apply(pd.to_numeric, errors='coerce')

答案 1 :(得分:0)

您也可以使用regex

<强>实施例

import pandas as pd
df = pd.DataFrame({"Debit/Credit": ["-£7.50", "-£5.79", "-£28.50", "-£3.99", "-£17.99"]})
df["Debit/Credit"] = df["Debit/Credit"].str.extract("(\d*\.\d+)", expand=True).apply(pd.to_numeric)
print(df)

<强>输出:

   Debit/Credit
0          7.50
1          5.79
2         28.50
3          3.99
4         17.99

答案 2 :(得分:0)

我通常喜欢转换为这样的花车:

let priceArray = [ 
        {
         "name" : "BMW",
         "price": 2 
        },
        {
         "name" : "Toyota",
         "price": 3 
        },
        {
         "name" : "Toyota",
         "price": 4 
        }
       ];

let myArray =  [{
        "Field": "Cars",
        "Type": ["BMW", "Toyota", "Volvo"]}]

let findPrice= (priceArray,mark)=> priceArray
  .find(x=> x.name === mark) 
  ? priceArray.find(x=> x.name === mark).price 
  : 'No data'


let mergedArray = myArray[0].Type.map(x=> ({[x]:findPrice(priceArray,x)}))

console.log(mergedArray)