【问题标题】:How to Concat a DataFrame with String to a DataFrame with Unicode and normalize datatype如何将带有字符串的 DataFrame 连接到带有 Unicode 的 DataFrame 并规范化数据类型
【发布时间】:2016-11-25 12:38:00
【问题描述】:

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

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])

输出:

>>> df.data.values
array(['A', 'BBB', 'CC'], dtype=object)

>>> df2.data.values
array([u'AAAAAAA'], dtype=object)

>>> df3.data.values
array(['A', 'BBB', 'CC', u'AAAAAAA'], dtype=object)

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

(我很在意,因为 pd.lib.infer_dtype 会将这个 numpy 数组的 dtype 标记为“混合”,我需要将其标记为“字符串”或“Unicode”,以将其与其他对象区分开来存储在 Pandas/Numpy 数组中)

【问题讨论】:

    标签: python python-2.7 numpy pandas unicode


    【解决方案1】:

    Pandas 有一个 astype 方法,但它返回一个系列。这将起作用。

        df2_copy = pd.DataFrame(d2.data.astype(str))
    
        df2_copy.data.values
        array(['AAAAAAA'], dtype=object)
    

    【讨论】:

    • 希望我能接受这两个答案!它们都有效,但其他答案更适合我的特定用例。谢谢!
    【解决方案2】:

    使用applymap 和encode

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

    df3.applymap(lambda s: s.encode('utf8')).data.values
    
    array(['A', 'BBB', 'CC', 'AAAAAAA'], dtype=object)
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 2023-03-27
      • 2020-10-26
      • 2014-10-10
      • 2018-12-24
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多