簡體   English   中英

使用 Python 從 dataframe 用逗號替換點

[英]Replacing dot with comma from a dataframe using Python

我有一個 dataframe 例如df:

我正在嘗試用逗號替換點,以便能夠在 excel 中進行計算。

我用了:

df = df.stack().str.replace('.', ',').unstack()

或者

df = df.apply(lambda x: x.str.replace('.', ','))

結果:

沒有任何變化,但我在執行結束時收到他的警告,沒有錯誤:

FutureWarning:正則表達式的默認值將在未來版本中從 True 更改為 False。 此外,當 regex=True 時,單字符正則表達式不會被視為文字字符串。


查看我所擁有的:

數據框到excel

預期成績:

在此處輸入圖像描述

感謝@Pythonista 匿名更新問題以獲取更多信息:

print(df.dtypes)

返回:

Date         object
Open         object
High         object
Low          object
Close        object
Adj Close    object
Volume       object
dtype: object

我正在使用 to_excel 方法提取數據:

df.to_excel()

我不是在 a.csv 文件中導出 dataframe 而是在 an.xlsx 文件中導出

dataframe 從何而來——它是如何產生的? 它是從 CSV 文件導入的嗎?

只要您記得執行df = df.apply()而不僅僅是df.apply() ,您的代碼就可以將其應用於字符串列,例如:

import pandas as pd
df = pd.DataFrame()
df['a'] =['some . text', 'some . other . text']
df = df.apply(lambda x: x.str.replace('.', ','))
print(df)

但是,您嘗試使用數字而不是字符串來執行此操作。 准確地說,另一個問題是:您的 dataframe 的 dtype 是什么? 如果你輸入

df.dtypes

output 是什么?

我想你的列是數字而不是字符串,對吧? 畢竟,如果它們是數字,它們應該這樣存儲在您的 dataframe 中。

下一個問題:你是如何將這個表導出到 Excel 的?

如果您要保存 csv 文件,pandas 的to_csv()方法有一個decimal參數,可讓您指定小數點的分隔符(通常在英語世界中為點,在歐洲大陸的許多國家中為逗號)。 查找語法

如果您使用的是 to_excel() 方法,則無關緊要,因為 Excel 應在內部將其視為數字,以及如何顯示它(無論是用點還是逗號作為小數分隔符)通常取決於您在計算機。

請說明您如何導出數據以及在 Excel 中打開它時會發生什么: Excel 是否將其視為字符串? 或者作為數字,但您希望看到不同的小數分隔符?

Also look here for how to change decimal separators in Excel: https://www.officetooltips.com/excel_2016/tips/change_the_decimal_point_to_a_comma_or_vice_versa.html

更新

OP,您還沒有解釋 dataframe 的來源。 您是否從外部來源導入它? 您自己創建/計算它嗎? 列是對象的事實使我認為它們要么存儲為字符串,要么有些行是數字的,有些則不是。

如果您嘗試將列轉換為浮點數會發生什么?

df['Open'] = df['Open'].astype('float64')

如果整個列應該是數字但不是,那么首先清理您的數據。

第二個問題:當你使用 Excel 打開你剛剛創建的文件時會發生什么? Excel 顯示一個逗號,但 Excel 要求分隔小數的字符取決於 Windows/Mac/Excel 設置,而不取決於 pandas 創建文件的方式。 您是否嘗試過我上面給出的鏈接,您可以更改 Excel 顯示小數的方式嗎? 此外,Excel 是否將這些數字視為數字或字符串?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM