如何使用String将带有String的DataFrame转换为具有Unicode和规范化数据类型的DataFrame

时间:2016-07-21 19:00:13

标签: python python-2.7 numpy pandas unicode

在Python2中连接两个具有不同类型字符串的数据帧时遇到问题。一个具有普通的Py2字符串,另一个具有unicode字符串。连接工作,但numpy数组内部的类型保持不变(我敢肯定设计)。

android:layout_above="@+id/linear"

输出:

import pandas as pd
from pandas import DataFrame, MultiIndex
from datetime import datetime as dt

df = DataFrame(data={'data': ['A', 'BBB', 'CC']},
                    index=MultiIndex.from_tuples([(dt(2016, 1, 1), 2),
                                                  (dt(2016, 1, 1), 3),
                                                  (dt(2016, 1, 2), 2)],
                                                 names=['date', 'id']))

df2 = DataFrame(data={'data': [u'AAAAAAA']},
                     index=MultiIndex.from_tuples([(dt(2016, 1, 2), 4)],
                                                  names=['date', 'id']))

df3 = pd.concat([df, df2])

如您所见,数组现在是“混合”的,它有字符串和unicode。有没有办法强迫它对一个或另一个进行类型转换?如果没有,是否有一种简单的方法来检查一方是否是unicode,并将该列转换为str或unicode?

(我关心因为pd.lib.infer_dtype会将这个numpy数组的dtype标记为“mixed”,我需要将它标记为'string'或'unicode',以区别于其他对象,也可以存储在Pandas / Numpy Arrays中)

2 个答案:

答案 0 :(得分:3)

Pandas有一个astype方法,但它返回一个系列。这会奏效。

    df2_copy = pd.DataFrame(d2.data.astype(str))

    df2_copy.data.values
    array(['AAAAAAA'], dtype=object)

答案 1 :(得分:1)

使用applymapencode

df3.applymap(lambda s: s.encode('utf8'))

enter image description here

df3.applymap(lambda s: s.encode('utf8')).data.values

array(['A', 'BBB', 'CC', 'AAAAAAA'], dtype=object)