pandas.read_csv将十进制​​零填充浮点数列转换为int

时间:2018-06-28 10:46:59

标签: python pandas csv dataframe

我将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

2 个答案:

答案 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