簡體   English   中英

如何將帶字符串的數據幀連接到帶Unicode的數據幀並規范化數據類型

[英]How to Concat a DataFrame with String to a DataFrame with Unicode and normalize datatype

在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”以區別於其他也可以存儲在熊貓中的對象/ numpy數組)

熊貓有一個astype方法,但它返回一個序列。 這將起作用。

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

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

使用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)

暫無
暫無

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

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