我有一个通过读取XLSX文件创建的数据框,我需要用逗号替换很多点,因为我不知道为什么在Excel中它会显示逗号,但是在熊猫数据框中它是一个点而不是十进制分隔器。我有29列用逗号替换点,因此我发现最好使用列表存储所有列名称,并使用for循环遍历我想用逗号替换这些点的所有列。>
但是不幸的是,当我尝试以下代码时出现错误:
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import win32com.client
import pandas as pd
import pathlib
root = tk.Tk()
canvas1 = tk.Canvas(root, width=300, height=300, bg='lightsteelblue2', relief='raised')
canvas1.pack()
label1 = tk.Label(root, text='File Conversion Tool', bg='lightsteelblue2')
label1.config(font=('helvetica', 20))
canvas1.create_window(150, 60, window=label1)
read_file = pd.DataFrame()
def get_excel_onefolder():
global read_file
import_dir_path = filedialog.askdirectory()
file_ext = "*.xlsx"
list_xlsx_file = list(pathlib.Path(import_dir_path).glob(file_ext))
lst_rpl = ['col24', 'col25', 'col26', 'col45', 'col46', 'col47', 'col69', 'col75', 'col76', 'col77', 'col105', 'col106',
'col107', 'col108', 'col109', 'col110', 'col111', 'col112', 'col254', 'col255', 'col256', 'col257', 'col258',
'col259', 'col260', 'col261', 'col262', 'col352', 'col353']
len_lst = len(lst_rpl)
for xlsx_file_path in list_xlsx_file:
read_file = pd.read_excel(xlsx_file_path)
read_file['Time'] = read_file['Time'].str.replace(',', '.')
for i in range(len_lst):
read_file[lst_rpl[i]] = read_file[lst_rpl[i]].str.replace('.', ',')
output_path = str(xlsx_file_path) + ".csv"
read_file.to_csv(output_path, index=None, header=True, decimal=',', sep=';')
tk.messagebox.showinfo(title="Import success", message="CSV file import successful !")
XLSX_to_CSV = tk.Button(text="Import Excel File & Convert to CSV", command=get_excel_onefolder, bg='green', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 180, window=XLSX_to_CSV)
root.mainloop()
我得到的错误是KeyError:'col24'
编辑: 我通过将NaN值,na_values的参数添加到.read_excel并使用小数='来解决我的问题,现在可以正常使用
read_file = pd.read_excel(xlsx_file_path, decimal=',', na_values=['#NV', ' '])
我的问题是因为我的列由于NaN值而未被识别为浮点数。
现在的工作功能是:
def get_excel_onefolder():
global read_file
import_dir_path = filedialog.askdirectory()
file_ext = "*.xlsx"
list_xlsx_file = list(pathlib.Path(import_dir_path).glob(file_ext))
for xlsx_file_path in list_xlsx_file:
read_file = pd.read_excel(xlsx_file_path, decimal=',', na_values=['#NV', ' '])
read_file['Time'] = read_file['Time'].str.replace(',', '.')
path_without_ext = os.path.splitext(str(xlsx_file_path))[0]
output_path = path_without_ext + ".csv"
read_file.to_csv(output_path, index=None, header=True, decimal=',', sep=';')
tk.messagebox.showinfo(title="Import success", message="CSV file import successful !")
答案 0 :(得分:0)
pandas尝试将逗号自动格式化为点。您可以使用decimal
参数更改此行为:
read_file = pd.read_excel(xlsx_file_path)
-> read_file = pd.read_excel(xlsx_file_path, decimal=",")
答案 1 :(得分:0)
for x in list_col:
df[list_col] = df[list_col].apply(lamba x: str(x).replace('.' , ',') if '.' in str(x) else x)
不知道此代码对您是否有帮助。如果存在点,此代码段可帮助您将点替换为所有列中的逗号。