如何将 numpy 一维数组转换为 Pandas 系列或数据框
How to convert numpy one dimensional array to Pandas Series or Dataframe
我在看似很容易的事情上花了一些时间。我想要的只是将一个 numpy 数组转换为一个系列,然后组合系列来制作一个数据框。我有两个 numpy 数组。
import numpy as np
rooms = 2*np.random.rand(100, 1) + 3
price = 265 + 6*rooms + abs(np.random.randn(100, 1))
我想将房间和价格转换为系列,然后将这两个系列组合成一个数据框来制作 lmplot
那么有人能告诉我该怎么做吗?谢谢
您可以使用 ravel()
将数组转换为一维数据:
pd.DataFrame({
'rooms': rooms.ravel(),
'price': price.ravel()
})
将数组直接传递给 pd.Series
的问题在于维数:rooms
和 price
是形状为 (100,1)
的二维数组,而 pd.Series
需要一维数组。要重塑它们,您可以使用不同的方法,其中之一是 .squeeze()
,即:
import pandas as pd
import numpy as np
rooms = 2*np.random.rand(100, 1) + 3
price = 265 + 6*rooms + abs(np.random.randn(100, 1))
rooms_series = pd.Series(rooms.squeeze())
price_series = pd.Series(price.squeeze())
现在要从系列转到数据框,您可以执行以下操作:
pd.DataFrame({'rooms': rooms_series,
'price': price_series})
或直接从 numpy 数组:
pd.DataFrame({'rooms': rooms.squeeze(),
'price': price.squeeze()})
我在看似很容易的事情上花了一些时间。我想要的只是将一个 numpy 数组转换为一个系列,然后组合系列来制作一个数据框。我有两个 numpy 数组。
import numpy as np
rooms = 2*np.random.rand(100, 1) + 3
price = 265 + 6*rooms + abs(np.random.randn(100, 1))
我想将房间和价格转换为系列,然后将这两个系列组合成一个数据框来制作 lmplot
那么有人能告诉我该怎么做吗?谢谢
您可以使用 ravel()
将数组转换为一维数据:
pd.DataFrame({
'rooms': rooms.ravel(),
'price': price.ravel()
})
将数组直接传递给 pd.Series
的问题在于维数:rooms
和 price
是形状为 (100,1)
的二维数组,而 pd.Series
需要一维数组。要重塑它们,您可以使用不同的方法,其中之一是 .squeeze()
,即:
import pandas as pd
import numpy as np
rooms = 2*np.random.rand(100, 1) + 3
price = 265 + 6*rooms + abs(np.random.randn(100, 1))
rooms_series = pd.Series(rooms.squeeze())
price_series = pd.Series(price.squeeze())
现在要从系列转到数据框,您可以执行以下操作:
pd.DataFrame({'rooms': rooms_series,
'price': price_series})
或直接从 numpy 数组:
pd.DataFrame({'rooms': rooms.squeeze(),
'price': price.squeeze()})