使用panda读取文件中的数组值



我有一个csv文件,其中一列中有一个数组值。您可以在此处查看数据(驱动器链接)。

我使用这个代码df = pd.read_csv('class_ 0_0_data.csv', sep=","),如果使用df.dtypes进行检查,则所有列都是对象类型。你怎么把它变成浮子?

我尝试使用df['CpuTemperature'] = df['CpuTemperature'].astype(float),但它返回

无法将字符串转换为浮动

我尝试使用df['CpuTemperature'] = pd.to_numeric(df['CpuTemperature'],errors='coerce'),但它将所有值返回给NaN。

有人知道如何将文件读取为可用值吗?我还想将所有列从object更改为float,而不仅仅是CpuTemperature。非常感谢。

编辑:预期的结果,类似于这样,所以我可以使用数组中每个元素的值,例如,绘制一个图。

|     |    CpuTemperature     |
|     |  0  |  1  |  2  |  3  |
| --- | ----------------------|
| 0   |56.75|44.75|3.52 |47.83|
| 1   |48.75|42.25|2.39 |45.00|

到目前为止,我使用df = pd.read_csv('class_ 0_0_data.csv', converters={'class_ 0_0_data': lambda x: np.array(x)}, index_col=0).T

您可以将转换器传递给read_csvclass_ 0_0_data列包含可以用ast.literal_eval解析的列表的列表的字符串表示。困难的部分是这些列表可以包含nan,它将在literal_eval处阻塞。一种可能的方法是将它们括在引号中,将它们转换为字符串,然后将它们改回正确的np.nan值:

def convert(x):
x = x.replace("nan", "'nan'")
lst = ast.literal_eval(x)
lst = [[x if x != 'nan' else np.nan for x in i] for i in lst]
return np.array(lst)

我们应该在其class_ 0_0_data列中获得一个包含预期np.ndarray的数据帧。

一旦加载了数据帧,我们就可以对其进行分解,用groupbycumcount计算行号,然后再次分解并计算列号。然后一个简单的透视图应该给出预期的格式:

df = pd.read_csv('class_ 0_0_data.csv',
converters={'class_ 0_0_data': convert})
df.columns = ['name', 'data']
df = df.explode('data')
df['row'] = df.groupby('name').cumcount()
df = df.explode('data')
df['col'] = df.groupby(['name', 'row']).cumcount()
df = df.pivot(index='row', columns=['name', 'col'], values='data').astype('float64')

最后,我们得到了一个包含float64列的数据帧,其初始部分为(由df.head(10)给出):

name CpuTemperature         ... ValidFrameOptrisPIIRCamera           
col               0      1  ...                          0          1
row                         ...                                      
0             56.75  44.75  ...                      259.0  27.582899
1             48.75  42.25  ...                      273.0  27.058227
2             47.50  42.00  ...                      272.0  26.907842
3             48.25  42.25  ...                      271.0  26.968238
4             50.00  42.50  ...                      271.0  26.969415
5             52.00  42.25  ...                      271.0  26.935518
6             50.00  40.50  ...                      270.0  26.886856
7             46.50  40.50  ...                      271.0  26.925594
8             47.75  41.00  ...                      271.0  26.975050
9             49.25  41.00  ...                      270.0  26.888554
[10 rows x 246 columns]

最新更新