簡體   English   中英

Pandas df.to_csv("file.csv" encode="utf-8") 仍然為減號提供垃圾字符

[英]Pandas df.to_csv("file.csv" encode="utf-8") still gives trash characters for minus sign

我讀過關於 Pandas 的 to_csv(... 等等...) 的 Python 2 限制的內容。 我打中了嗎? 我在 Python 2.7.3

當 ≥ 和 - 出現在字符串中時,這會變成垃圾字符。 除此之外,出口是完美的。

df.to_csv("file.csv", encoding="utf-8") 

有什么解決方法嗎?

df.head() 是這樣的:

demography  Adults ≥49 yrs  Adults 18−49 yrs at high risk||  \
state                                                           
Alabama                 32.7                             38.6   
Alaska                  31.2                             33.2   
Arizona                 22.9                             38.8   
Arkansas                31.2                             34.0   
California              29.8                             38.8  

csv output是這個

state,  Adults ≥49 yrs,   Adults 18−49 yrs at high risk||
0,  Alabama,    32.7,   38.6
1,  Alaska, 31.2,   33.2
2,  Arizona,    22.9,   38.8
3,  Arkansas,31.2,  34
4,  California,29.8, 38.8

整個代碼是這樣的:

import pandas
import xlrd
import csv
import json

df = pandas.DataFrame()
dy = pandas.DataFrame()
# first merge all this xls together


workbook = xlrd.open_workbook('csv_merger/vaccoverage.xls')
worksheets = workbook.sheet_names()


for i in range(3,len(worksheets)):
    dy = pandas.io.excel.read_excel(workbook, i, engine='xlrd', index=None)
    i = i+1
    df = df.append(dy)

df.index.name = "index"

df.columns = ['demography', 'area','state', 'month', 'rate', 'moe']

#Then just grab month = 'May'

may_mask = df['month'] == "May"
may_df = (df[may_mask])

#then delete some columns we dont need

may_df = may_df.drop('area', 1)
may_df = may_df.drop('month', 1)
may_df = may_df.drop('moe', 1)


print may_df.dtypes #uh oh, it sees 'rate' as type 'object', not 'float'.  Better change that.

may_df = may_df.convert_objects('rate', convert_numeric=True)

print may_df.dtypes #that's better

res = may_df.pivot_table('rate', 'state', 'demography')
print res.head()


#and this is going to spit out an array of Objects, each Object a state containing its demographics
res.reset_index().to_json("thejson.json", orient='records')
#and a .csv for good measure
res.reset_index().to_csv("thecsv.csv", orient='records', encoding="utf-8")

您的“壞”輸出是 UTF-8,顯示為 CP1252。

在 Windows 上,如果文件開頭沒有字節順序標記 (BOM) 字符,則許多編輯器假定默認的 ANSI 編碼(美國 Windows 上的 CP1252)而不是 UTF-8。 雖然 BOM 對 UTF-8 編碼毫無意義,但它的 UTF-8 編碼存在可用作某些程序的簽名。 例如,即使在非 Windows 操作系統上,Microsoft Office 的 Excel 也需要它。 嘗試:

df.to_csv('file.csv',encoding='utf-8-sig')

該編碼器將添加 BOM。

encoding='utf-8-sig對我不起作用。 Excel 現在可以很好地讀取特殊字符,但是制表符分隔符消失了,但是, encoding='utf-16確實可以正常工作:特殊字符可以,制表符分隔符可以。 這是我的解決方案。

暫無
暫無

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

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