2014-04-11 142 views
0

當我在R中讀取數據(死於M370空難)時,格式沒問題。如何在python中設置非ANSI字符的對齊方式

> read.csv("g:\\test.ansi",sep=",") 
      乘客姓名 性別 出生日期 
1  HuangTianhui 男 1948/05/28 
2    姜翠雲 女 1952/03/27 
3    李紅晶 女 1994/12/09 
4   LuiChing 女 1969/08/02 
5    宋飛飛 男 1982/03/01 
6    唐旭東 男 1983/08/03 
7  YangJiabao 女 1988/08/25 

當我在python中讀取數據時,如何設置記錄右對齊?

>>> import pandas as pd  
>>> pd.read_csv("g:\\test.ansi",sep=",") 
      乘客姓名   性別 出生日期 
0 HuangTianhui 男 1948/05/28 
1    姜翠雲 女 1952/03/27 
2    李紅晶 女 1994/12/09 
3  LuiChing 女 1969/08/02 
4    宋飛飛 男 1982/03/01 
5    唐旭東 男 1983/08/03 
6  YangJiabao 女 1988/08/25 
7  買買提江·阿布拉 男 1979/07/10 

的數據是在這裏:http://pan.baidu.com/s/1sjHauL3

+0

你能展示'test.ansi'文件是怎麼樣的嗎? – joris

+0

在IPython筆記本上顯示數據框時,它會將其左對齊,這看起來是正確的,但是當您輸出第一列時,可以看到它不對齊,如果刪除西文字符串,則只保留中文字符,那麼它就會正確對齊,這看起來像是一個混合字符集的問題(儘管我希望它將所有內容都視爲unicode)或字符寬度問題與混合字符集 – EdChum

回答

0

的原因是,與中國文字打交道時(這需要兩個ANSI字符的空間),pandas仍填充空白量爲ANSI字符。這意味着空白的數量只是包含中文字符的DF所需的一半。是什麼使情況變得更糟這是pandas忽視了中國漢字需要兩倍的空間:

print pd.read_csv("test.ansi",sep=",", encoding='gb18030').loc[10:12] 

10 邊亮京 男 1987/06/06 
11 邊茂勤 女 1947/07/19 
12 曹蕊 女 1982/02/19 
#notice how the last line is missing one leading white space compared to the preceding lines. 

最終,引擎蓋下的所有根據_repr_fit_horizontal_類歸結爲__unicode__DataFrame類分配空間。我不確定什麼可能是最好的解決方案。當遇到中文字符時,用兩個空格代替一個空格?在混合行的情況下,這不是一個好主意,有些是有的,有的沒有中文字符,比如在這個dataframe

也許值得報告這是一個錯誤。

但是,如果您使用IPython筆記本,則受此問題影響較小,因爲DataFrames很好地顯示爲HTML。

相關問題