我有一个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
我的代码或方法有什么错误?
答案 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)