【问题标题】:How to specify column type in pandas dataframe如何在熊猫数据框中指定列类型
【发布时间】:2018-10-12 04:44:02
【问题描述】:

执行此行后

data['numbers'] = data.apply(lambda row : [1] * len(row.text), axis=1)

“数字”列不是我期望的列表,而是无法索引的对象类型,我得到 IndexError。

我想要的结果是一个带有“数字”的列,其中每一行的数字与该行中相应文本的长度一样多。

我该如何解决?

【问题讨论】:

    标签: python list pandas dataframe apply


    【解决方案1】:

    dtype of strings、dicts、lists、sets、tuples 始终为object,用于测试type

    data = pd.DataFrame({'text':['aaas','as']}, index=[10,12])
    
    data['numbers'] = data.apply(lambda row : [1] * len(row.text), axis=1)
    
    print (data['numbers'].apply(type))
    0    <class 'list'>
    1    <class 'list'>
    Name: numbers, dtype: object
    
    #check scalar
    print (type(data.loc[0, 'numbers']))
    <class 'list'>
    

    如果要查看lengths:

    print (len(data.iloc[0, data.columns.get_loc('numbers')]))
    4
    
    data['lens'] = data['numbers'].str.len()
    print (data)
    
        text       numbers  lens
    10  aaas  [1, 1, 1, 1]     4
    12    as        [1, 1]     2
    

    【讨论】:

    • 如果我将 DataFrame 转换为 pandas Series 则一切正常,但如果我尝试对其进行迭代,则会得到 indexError: for eg: len(data.iloc[0]['numbers'] ) = 1 这不可能是真的,因为在将其转换为系列后,它是一个包含 2000 个元素的列表
    • @Zarrie - 你能用indexError告诉我你的代码吗?
    • 那么返回 print (len(data.iloc[0]['numbers'])) 呢?
    • 我不能分享代码,因为它是项目的一部分,而且错误本身就像几百行,所以我假设我必须单独处理它。感谢您的帮助!
    • print (len(data.iloc[0]['numbers'])) 打印 1 我看到实际打印 data.iloc[0]['numbers'] 是 array([list( [1,1,1,1,1....,1,1,1])]) 是这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多