我有一个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)。
谢谢!
答案 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