【问题标题】:Pandas string to float - Several data not comma separeted熊猫字符串浮动 - 几个数据没有逗号分隔
【发布时间】:2021-07-06 17:20:29
【问题描述】:

我有一列包含多个度量,所有度量都在一行中,如下图所示:

我正在尝试将此 str 列转换为浮点数或数字,以便能够执行平均值、绘图直方图等计算。

我尝试了df['nums']=df['nums'].astype(float) 并得到了这个错误:

我该如何解决?

谢谢

【问题讨论】:

  • out=df['nums'].str.split(' ',expand=True).astype(float)?....顺便说一句,你想达到什么目的?
  • 你得到一个错误的原因是你不能把一个长串的许多浮点数全部变成一个浮点数
  • @AnuragDabas 我得到了我正在寻找的结果,但随后我在我的 DF 中又得到了 100 列。有没有办法在同一列中获取所有这 100 个值,比如向量/数组?
  • 您可以将它们包装在容器中,即列表尝试:out=df['nums'].str.split(' ',expand=True).astype(float).values.tolist()
  • @AnuragDabas 不错!它们都在同一列中,但仍为 str,因为我仍然无法执行计算,例如 mean()。

标签: python-3.x pandas


【解决方案1】:

我不知道这是否能满足您的需求,但我会使用混合方法,因为 pandas df 通常被视为具有单元格值的表格;

所以我会用一个字典来做一个扭曲,它的键是你的索引或“id”。然后,您将能够使用该字典执行计算,并在必要时将其链接回您的原始数据框...

我写的代码需要numpy和pandas:

import numpy as np
import pandas as pd

从数据框中获取字典的代码可能如下所示:

def init_operations_on_data(df):

    df_dct = {}
    list_=df['nums'].str.split(' ',expand=True).astype(float).values.tolist()
    # from Anurag Dabas comments
    for i, v in df.iloc[:,0].iteritems():
        #Here I took the first column of the dataframe df as an "id" but you can replace by index
        df_dct[v] = list_[int(i)]
    print(df_dct)

    return df_dct
    # return a dict object

要计算平均值或任何其他统计数据,您可以编写调用上述函数的小函数:


def mean_on_rows(df):

    df_dct = init_operations_on_data(df)
    # dataframe as a dict
    l_mean = []
    for keys in df_dct.keys():
        l_mean.append(np.nanmean(df_dct[keys]))
        # here the link-up between the keys and the id/index in the dataframe is not completely secured and might need to be looked up in more details
    df['mean'] = l_mean
    print(df)

    return df

拥有一个包含值列表的字典(对于不同的行可以有不同的长度)还可以让您轻松绘制条形图和直方图

例如看这个讨论: How to make a histogram from a list of data

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 2020-04-04
    • 2017-11-14
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多