我将Pandas DataFrame存储在一个.csv文件中,该文件具有一列带有整数数据的列,但是由于遗留原因,数据库系统将其视为浮点数,因此.csv也需要将其存储为浮点数。当使用const { from } = require('rxjs');
const Observable = require('rxjs').Observable;
const jsArr = [];
fromStream(fs.createReadStream(req.file.path, 'utf-8').pipe(csv()))
.map((data) => data.USERNAME)
.subscribe(
(data) => jsArr.push(data),
(error) => console.log(error),
() => {
const CSVData = Parse.Object.extend('CSVData');
const csv = new CSVData();
csv.set('CSV',jsArr);
from (csv.save())
.subscribe(
() => res.json(serialize({type:'success'})),
(error) => console.log(error)
);
}
);
存储它时,它将保留零填充的小数部分,因此.csv文件中的列类似于:
df.to_csv
但是当我用IntNumber
3.0
45.0
123.0
...
加载时,尽管尾随零,它仍将类型推断为pandas.from_csv
。我查看了pandas.read_csv文档,似乎可以手动将数据类型指定为int64
,但是我认为有多种情况需要检测为float64
float
中的。在尾随零出现时自动推断类型为float会很有用,这可能吗?
我如何加载csv的代码段,目前已将int64
中的列类型推断为dataframe
int64
答案 0 :(得分:1)
我无法复制您的问题,请参见下面的示例。
from io import StringIO
import pandas as pd
mystr = StringIO("""IntNumber
3.0
45.0
123.0""")
df = pd.read_csv(mystr)
#pandas 0.19.2, python 3.6.0
print(df.dtypes)
IntNumber float64
dtype: object
#pandas 0.23.1, python 3.6.4
print(df.dtypes)
IntNumber float64
dtype: object
答案 1 :(得分:1)
我无法在我的Pandas版本(0.23.1)中重现您的问题,但是在使用dtype
参数读取CSV文件时,可以明确说明类型。
赞:
import pandas as pd
import numpy as np
from io import StringIO
def read_data():
return StringIO("""IntNumber\n3.0\n45.0\n\n123.0""")
df = pd.read_csv(read_data(), dtype={'IntNumber': np.float32})
print(df.dtypes)
# Output:
# IntNumber float32
# dtype: object
df = pd.read_csv(read_data(), dtype={'IntNumber': np.int32})
print(df.dtypes)
# Output:
# IntNumber int32
# dtype: object