如何在python中展平数据numpy.ndarray

2024-09-28 17:06:47 发布

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

我有一个numpy.ndarray数据,如下所示,我想将其展平,以便可以对其进行操作。请在下面找到我的示例数据:

sample_data=[list([{'region': 'urn:li:region:9194', 'followerCounts': {'organicFollowerCount': 157, 'paidFollowerCount': 0}}, {'region': 'urn:li:region:7127', 'followerCounts': {'organicFollowerCount': 17, 'paidFollowerCount': 0}}])]

我尝试使用以下代码,但还没有成功:

sample.flatter()

所需的输出如下:

region                 organicFollowerCount   paidFollowerCount

urn:li:region:9194    157                          0
urn:li:region:7127    17                           0

有谁能帮我做到这一点吗


Tags: 数据sample代码numpy示例dataliregion
2条回答

以下是一种使用pd.json_normalize的方法:

import pandas as pd

# note that `sample data` has been modified into a list of dictionaries
sample_data = [
    {'region': 'urn:li:region:9194', 
     'followerCounts': {'organicFollowerCount': 157, 'paidFollowerCount': 0}}, 
    {'region': 'urn:li:region:7127', 
     'followerCounts': {'organicFollowerCount': 17, 'paidFollowerCount': 0}}
]

现在,将列表中的每个项目转换为数据帧:

dfs = list()

# convert one dict at a time into a data frame, using json_normalize()
for sd in sample_data:
    t = pd.json_normalize(sd)
    dfs.append(t)

# convert list of dataframes into a single data frame, 
#   and change column labels
t = pd.concat(dfs).rename(columns={
    'followerCounts.organicFollowerCount': 'organicFollowerCount',
    'followerCounts.paidFollowerCount': 'paidFollowerCount'
}).set_index('region')

print(t)


                    organicFollowerCount  paidFollowerCount
region                                                     
urn:li:region:9194                   157                  0
urn:li:region:7127                    17                  0

正如@TheHuman橡皮擦所指出的,这种格式并不理想,但我们不能总是影响我们接收的数据的格式

使用Numpy的展平方法将无法按所需方式展平此数据。该方法只需将多维数据集展平为一维。您可以阅读文档here

还有几件事。首先,上面的示例数据不是ndarray,它只是一个python列表。实际上,由于您在方括号内调用list(),它是一个嵌套的字典列表。这真的不是一种存储这些信息的好方法,基于这种复杂的格式,您几乎没有选择可以很好地将其“展平”到您想要的表中

如果您有许多这样的行,我将执行以下操作:

headers = ["region", "organicFollowerCount", "paidFollowerCount"]
data = [headers]
for row in sample_data[0]: # Subindexing here because it is unwisely a nested list
    formatted_row = []
    formatted_row.append(row["region"])
    formatted_row.append(row["followerCounts"]["organicFollowerCount"])
    formatted_row.append(row["followerCounts"]["paidFollowerCount"]
    data.append(formatted_row)
data = np.array(data)

这将为您提供一系列的数据,但这仍然是一个丑陋的解决方案。实际上,这是一种非常不切实际的数据表示方式,您应该放弃它,换一种更好的方式

最后一件事:不要使用驼峰案例。这是一些语言(如Java)的标准实践,但Python也不是。使用organic_follower_count等代替organicFollowerCount

相关问题 更多 >