更改小数点分隔符(Python,Sqlite,Pandas)

时间:2017-09-17 12:19:12

标签: python excel sqlite pandas

我有一个Excel电子表格(来自SAP的摘录),其中包含数据(文本,数字)。我将这些数据转换为DataFrame,进行一些计算,最后将其保存到sqlite数据库。 而excel电子表格的逗号为小数点分隔符。 sqlite数据库包含带点作为小数分隔符的数字。

从代码中摘录:

df_mce3 = pd.read_excel('rawdata/filename.xlsx', header=0, converters={'supplier': str, 'month': str}, decimal=',')

(十进制=','是一个建议的解决方案,只有在您使用csv时才有效)

完成计算后,我使用以下代码将结果保存到sqlite数据库:

conn = sqlite.connect("database.db")
df_mce3.to_sql("rawdata", conn, if_exists="replace")
df_ka_ext.to_sql("costanalysis_external", conn, if_exists="replace")
[...]

输入:

month   ordqty  ordprice    ordervolume invoiceqty  invoiceprice    
08.2017 10,000  14,90       149,00      10,000      14,90

输出:

month   ordqty  ordprice    ordervolume invoiceqty  invoiceprice    
08.2017 10.000  14.90       149.00      10.000      14.90

我确实需要这些数字与输入数据具有相同的小数分隔符,我找不到这样做的方法。

因此我问你是否有人知道如何实现它?

我在Mac OS X上使用Python 3.5和pandas(0.19.1)以及numpy(1.11.2)。

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在保存之前转换float值。只需使用包含.的值循环遍历列,将每个值转换为字符串,然后就可以使用replace方法。

此处我转换了x

中的所有值
df['x'] = [str(val).replace('.', ',') for val in df['x']]
df.to_sql('rawdata', conn, if_exists='replace')

答案 1 :(得分:0)

评论结束后,我终于想出了一个至少可以用于样本数据的解决方案。我将不得不检查它是否适用于我的实际数据。

#!/usr/bin/env python3.5
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))

def formatnumbers(x):
    x = round(x, 4)
    x = str(x).replace('.', ',')
    return x

for col in df.columns:
    df[col] =  df[col].apply(formatnumbers)

print(df.head(n=5))

结果是:

         A        B        C        D
0  -0,4065  -1,6113   0,2257   0,7424
1   0,8349   0,0316   -1,105  -1,6463
2  -0,2108   0,7356  -1,0823   0,5261
3   0,3382   0,6158   0,6117  -0,3896
4   -0,403  -1,3639   0,8691   0,5791