如何在python中使用非nsi字符设置pandas对齐

2024-10-01 04:47:42 发布

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

当我读R中的数据(M370空难中的死亡)时,格式是正确的。在

> 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中读取数据时,如何设置记录的正确对齐方式?在

^{pr2}$

数据在这里:http://pan.baidu.com/s/1sjHauL3


Tags: csv数据testread格式sep出生日期姓名
2条回答

我也遇到过这个问题。在查看了dataframe的呈现代码后,我在pandas(v0.25)源代码中发现了以下方法:

def _get_adjustment():
    use_east_asian_width = get_option("display.unicode.east_asian_width")
    if use_east_asian_width:
        return EastAsianTextAdjustment()
    else:
        return TextAdjustment()

因此,解决方案是在打印包含CJK字符的数据帧之前设置该选项。在

^{pr2}$

把它应用到你的数据上之后,它就起作用了。在

not setting this option

setting this option to True

原因是在处理中文字符(它占用两个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.

最终,所有这些都归结到DataFrame类的__unicode__类,该类根据_repr_fit_horizontal_类分配空间。我不确定什么是最好的解决办法。当遇到汉字时,用两个空格代替一个空格?在混合行的情况下,这不是一个好主意,有些行有汉字,有些没有汉字,比如在这个dataframe中。在

也许值得将其作为bug报告。在

但是,如果使用IPython笔记本,则受此问题影响较小,因为DataFrames很好地显示为HTML。在

相关问题 更多 >