读取拼花文件时如何将小数点格式从点更改为逗号?
How to change the decimal format from dot to comma when reading parquet files?
我正在使用 parquet 文件,为了阅读它们,我正在使用 pd.read_parquet()
。但是,文件中的数值使用逗号,这是对数字的误解。
如何将小数点的符号从点改为逗号?
这是我的一段代码:
new_col = pa.parquet.read_table(filepath).to_pandas()
aux = pd.concat([aux, new_col])
df.head()
X_Principal Y_Principal value_main \
ts
2016-01-27 15:15:00 1.0 4.0 11.020800
2016-01-27 15:15:00 1.0 4.0 11.020800
2016-01-27 15:15:00 1.0 4.0 36.408001
2016-01-27 15:15:00 1.0 4.0 36.408001
2016-01-27 15:30:00 1.0 4.0 12.004800
type(new_col)
<class 'pandas.core.frame.DataFrame'>
例如,列值中的数字应该类似于 110.20800。
Parquet 是一种二进制文件格式。您的镶木地板已将浮点数存储为字符串,并以逗号作为分隔符。所以你的parquet文件中的格式已经错误,没有space解释(即pandas没有"misunderstand"任何东西)。
您可以自己解析包含数字字符串表示形式的列,并使用逗号作为小数点分隔符,例如
df['col'] = pd.to_numeric(df['col'].str.replace(',','.'))
让我们做一些最小的可重复实验。
让我们准备一些数据:
In [1]: df = pd .DataFrame({"a":["1,1", "1,2"],"b":[1,2]})
In [2]: df.to_parquet("./df.parquet", compression="GZIP")
让我们看看我们到底有什么:
18:48:29 delete$ parquet-cat df.parquet
a = 1,1
b = 1
a = 1,2
b = 2
然后,让我们读取数据并将关注的列转换为浮点数:
In [8]: df1 = pd.read_parquet("./df.parquet")
In [9]: df1
Out[9]:
a b
0 1,1 1
1 1,2 2
In [10]: df1.a.str.replace(",",".").astype("float64")
Out[10]:
0 1.1
1 1.2
Name: a, dtype: float64
如您所见,它正在处理带有逗号小数的镶木地板文件。
PS
您添加到问题中的数据与问题本身并不完全一致。我认为您应该使用 parquet-tool
等工具更仔细地调查镶木地板文件中的内容,看看它是否正确读取。
我正在使用 parquet 文件,为了阅读它们,我正在使用 pd.read_parquet()
。但是,文件中的数值使用逗号,这是对数字的误解。
如何将小数点的符号从点改为逗号?
这是我的一段代码:
new_col = pa.parquet.read_table(filepath).to_pandas()
aux = pd.concat([aux, new_col])
df.head()
X_Principal Y_Principal value_main \
ts
2016-01-27 15:15:00 1.0 4.0 11.020800
2016-01-27 15:15:00 1.0 4.0 11.020800
2016-01-27 15:15:00 1.0 4.0 36.408001
2016-01-27 15:15:00 1.0 4.0 36.408001
2016-01-27 15:30:00 1.0 4.0 12.004800
type(new_col)
<class 'pandas.core.frame.DataFrame'>
例如,列值中的数字应该类似于 110.20800。
Parquet 是一种二进制文件格式。您的镶木地板已将浮点数存储为字符串,并以逗号作为分隔符。所以你的parquet文件中的格式已经错误,没有space解释(即pandas没有"misunderstand"任何东西)。
您可以自己解析包含数字字符串表示形式的列,并使用逗号作为小数点分隔符,例如
df['col'] = pd.to_numeric(df['col'].str.replace(',','.'))
让我们做一些最小的可重复实验。
让我们准备一些数据:
In [1]: df = pd .DataFrame({"a":["1,1", "1,2"],"b":[1,2]})
In [2]: df.to_parquet("./df.parquet", compression="GZIP")
让我们看看我们到底有什么:
18:48:29 delete$ parquet-cat df.parquet
a = 1,1
b = 1
a = 1,2
b = 2
然后,让我们读取数据并将关注的列转换为浮点数:
In [8]: df1 = pd.read_parquet("./df.parquet")
In [9]: df1
Out[9]:
a b
0 1,1 1
1 1,2 2
In [10]: df1.a.str.replace(",",".").astype("float64")
Out[10]:
0 1.1
1 1.2
Name: a, dtype: float64
如您所见,它正在处理带有逗号小数的镶木地板文件。
PS
您添加到问题中的数据与问题本身并不完全一致。我认为您应该使用 parquet-tool
等工具更仔细地调查镶木地板文件中的内容,看看它是否正确读取。