要在数据帧列中浮动的字符串

2024-10-03 00:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧的第5列是一个浮动列表。我想用列表中的最大值替换列表。我怎么能这样做

我正在尝试此操作,但出现了一个错误:

import pandas as pd
import numpy as np

colNames = ['unixTime', 'sampleAmount','Time','samplingRate', 'Data']

data = pd.read_csv("project_fan.csv",  sep = ';', error_bad_lines = False, names = colNames) 
print(data.head())
data['Data'] = [float(x) for x in data.Data.values]
data['Data'] = [np.array(x).mean()for x in data.Data.values]
Traceback (most recent call last):
  File "new.py", line 9, in <module>
    data['Data'] = [float(x) for x in data.Data.values]
ValueError: could not convert string to float: [1618.6294555664062, 1619.0826416015625, 1620.0897216796875, 1620.0393676757812, 1620.0393676757812, 1620.240783691406, 1620.391845703125, 1620.0897216796875, 1619.435119628906, 1620.4925537109373, 16

还尝试使用astype(float.mean),但不起作用

示例数据帧:

       unixTime  sampleAmount  Time  samplingRate   Data
0  1.556891e+09         16384   340  48188.235294  [1618.6294555664062,1619.0826416015625,1620.489622]
1  1.556891e+09         16384   341  48046.920821  [1619.78759765625,1619.0826416015625,1620.49754]

Tags: 数据inimport列表fordataasnp
1条回答
网友
1楼 · 发布于 2024-10-03 00:32:25

从错误消息中可以清楚地看到,“data”列中的数据存储为一个字符串,其中包含类似于浮点列表的Python表示形式。这是很自然的,因为它来自CSV文件,而CSV文件不能在单个列中表示数字列表

你可以用type(data.Data[0])检查一下,我希望它会告诉你str

因为它看起来像一个浮点列表的Python表示,所以一个好方法是使用Python的模块来计算Python文本,这可以通过^{} function实现。该函数能够解释Python的基本类型(整数、浮点、字符串、列表、元组、dict),并且是解析来自外部源(如CSV文件)的内容的安全方法

因此,您可以使用以下命令将其转换为实际的浮动列表:

import ast
data['Data'] = data.Data.transform(ast.literal_eval)

另一种方法是声明此列包含JSON编码的数据,并将其解析为JSON。在本例中,对于浮点数列表,Python和JSON表示都是等效的,因此这两种方法都可以工作。(JSON解码可能会更快,JSON通常比一般的Python文本语法更简单。)

要将其解码为JSON(替代上述内容):

import json
data['Data'] = data.Data.transform(json.loads)

此时(在Python或JSON转换之后),您可以对结果使用np.mean等函数,因为它只是一个浮点列表,不再是字符串:

data['Data'] = data.Data.apply(np.mean)

相关问题 更多 >