更改十进制分隔符(Python、Sqlite、Pandas)

2024-05-13 00:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Excel电子表格(它是从SAP摘录的),里面有数据(文本、数字)。我将这些数据转换成一个数据帧,进行一些计算,最后将其保存到sqlite数据库中。 而excel电子表格的小数点分隔符是逗号。sqlite数据库包含以点作为小数分隔符的数字。在

代码摘录:

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

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

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

^{pr2}$

输入:

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

我确实需要这些数字有相同的十进制分隔符作为输入数据,我找不到这样做的方法。在

因此,我问你们中是否有人知道如何实现这一目标?

我在macosx上使用python3.5和pandas(0.19.1)以及numpy(1.11.2)

谢谢你!在


Tags: 数据代码数据库sqlite数字excel电子表格decimal
2条回答

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

这里我转换了x列中的所有值

df['x'] = [str(val).replace('.', ',') for val in df['x']]
df.to_sql('rawdata', conn, if_exists='replace')

在评论之后,我终于想出了一个至少能处理样本数据的解决方案。我得检查一下它是否与我的实际数据相符。在

#!/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))

结果是:

^{pr2}$

相关问题 更多 >