通常我们需要在 NumPy 数组中创建数据并将其转换为 DataFrame,因为我们必须处理 Pandas 方法。
在这种情况下,转换NumPy 数组 (ndarrays)到数据框 使我们的数据分析变得方便。在本教程中,我们将仔细研究一些可用于将 NumPy 数组转换为 Pandas DataFrame 的常用方法。
我们还将见证一些常见技巧来处理与 Pandas DataFrame 具有不同值的不同 NumPy 数组数据结构。
创建 NumPy 数组 (ndarrays)
NumPy 数组是多维数组,它们可以存储同质或异构数据。
我们可以通过多种方式创建 NumPy 数组。
方法一:使用arange() 方法:它将根据给定参数创建一系列值,从零开始。这是显示如何使用它的代码片段。
import numpy as np
arry = np.arange(20)
print(arry)
Output
This is one dimensional array.
方法 2:使用 list 和 numpy.array():在这种技术中,我们将使用 numpy.array() 方法并传递列表以将其转换为数组。这是显示如何使用它的代码片段。
import numpy as np
li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arry = np.array(li)
print(arry)
Output
But for DataFrame, we will need a two dimensional array. To create a two dimensional array, we have two different approaches:
使用 arange() 和重塑() :我们可以依次使用这两种方法来生成一系列值并将它们放置在适当的形状中。这是显示如何使用它的代码片段。
import numpy as np
arry = np.arange(24).reshape(8,3)
print(arry)
Output
使用列表和 numpy.array():在此技术中,我们将使用 numpy.array() 方法并传递嵌套列表以将其转换为数组。这是显示如何使用它的代码片段。
import numpy as np
li = [[10, 20, 30, 40], [42, 52, 62, 72]]
arry = np.array(li)
print(arry)
Output
使用 DataFrame 构造函数转换同质 NumPy 数组 (ndarrays)
Pandas 中的 DataFrame 是行和列中的二维数据集合。它存储同质和异构数据。
我们必须使用 DataFrame() 构造函数从 NumPy 数组创建 DataFrame。这是显示如何使用它的代码片段。
import numpy as np
import pandas as pd
li = [[10, 20, 30, 40], [42, 52, 62, 72]]
arry = np.array(li)
dataf = pd.DataFrame(arry)
print(dataf)
print()
print(type(dataf))
Output
将列名和索引添加到转换后的 DataFrame
我们可以使用 DataFrame() 中的列和索引参数来确定 DataFrame 的列名称和索引标签。
默认情况下,列和索引值从 0 开始并以 1 递增。以下是指定列和索引的 DataFrame 示例。
import numpy as np
import pandas as pd
li = [[10, 20, 30, 40], [42, 52, 62, 72]]
arry = np.array(li)
dataf = pd.DataFrame(arry, index = ['R1', 'R2'], columns = ['ColA', 'ColB', 'ColC', 'ColD'])
print(dataf)
print()
print(type(dataf))
Output
将异构 NumPy 数组转换为 DataFrame
我们还可以从 NumPy 数组创建一个 DataFrame,其中包含异构值作为嵌套列表。
我们可以将 ndarrays 对象传递给 DataFrame() 构造函数并设置列值以创建具有异构数据值的 DataFrame。
这是具有异构数据的 DataFrame 的示例。
import numpy as np
import pandas as pd
arry = np.array([[25, 'Karlos', 2015], [21, 'Gaurav', 2016], [22, 'Dee', 2018]], dtype = object)
df = pd.DataFrame(arry, columns = ['Age', 'Student_Name', 'Passing Year'] , index = [1, 2, 3])
print(df)
Output
按列从 NumPy 数组创建 DataFrame
这是使用二维 ndarrays 逐列彻底索引机制从 NumPy 数组创建 DataFrame 的另一种方法。
它的工作原理与一般数组中的列优先类似。这是一个展示如何使用它的示例。
import numpy as np
import pandas as pd
arry = np.array([[10, 20, 30, 40],
[15, 18, 20, 23],
[51, 42, 33, 24]])
print(arry, "\n")
myDat = pd.DataFrame({'col_1': arry[:, 0], # Create pandas DataFrame
'col_2': arry[:, 1],
'col_3': arry[:, 2],
'col_4': arry[:, 3]})
print(myDat)
Output
从 NumPy 数组按行创建 DataFrame
这是使用二维 ndarrays 逐行彻底索引机制从 NumPy 数组创建 DataFrame 的另一种方法。它的工作原理与一般数组中的行优先类似。这是一个展示如何使用它的示例。
import numpy as np
import pandas as pd
arry = np.array([[10, 20, 30, 40],
[15, 18, 20, 23],
[51, 42, 33, 24]])
print(arry, "\n")
myDat = pd.DataFrame({'row_1': arry[0, :], # Create pandas DataFrame
'row_2': arry[1, :],
'row_3': arry[2, :]}, index = ['col1', 'col2', 'col3', 'col4'])
print(myDat)
Output
将 NumPy 数组连接到 Pandas Dataframe
我们还可以通过创建一个 DataFrame(通过 ndarray)并将其与另一个使用 equal 运算符合并来将 NumPy 数组连接到 Pandas DataFrame。这是一个代码片段,展示了如何实现它。
import numpy as np
import pandas as pd
ary = np.array([['India', 91], ['USA', 1], ['France', 33]], dtype = object)
print(ary)
print(type(ary), "\n")
df = pd.DataFrame(ary, columns = ['Country Name', 'Phone Code'])
arr1 = np.array([['Jio'], ['Airtel'], ['AT&T']], dtype=object)
df2 = pd.DataFrame(arr1, columns = ['Brand'])
df['Brand_Name'] = df2['Brand']
print(df)
Output
将 NumPy 数组附加为 DataFrame 中的新列
我们还可以直接将 2D NumPy 数组合并到 Pandas DataFrame 中。为此,我们必须将嵌套列表转换为 Pandas DataFrame,并将其分配给具有列名称的现有 DataFrame 列。
下面的代码片段展示了如何直接使用列名附加新的基于 NumPy 数组的列。
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(4, 13).reshape(3, 3))
df['New_Col'] = pd.DataFrame(np.array([[2],
[4],
[6]]))
print(df)
Output
使用 concat() 将 NumPy 数组转换为 DataFrame
concat() 是 Pandas 的另一种强大方法,用于将两个 DataFrame 连接成一个新的 DataFrame。我们可以使用 concat() 方法将新的 DataFrame 与 NumPy 数组连接起来。
其语法为: pandas.concat([dataframe1, pandas.DataFrame(ndarray)], axis = 1) 下面是显示如何实现它的代码片段。
import numpy as np
import pandas as pd
df = pd.DataFrame({'value1': [25, 12, 15, 14, 19],
'value2': [52, 17, 12, 9, 41],
'value3': [10, 30, 15, 11, 14]})
newArr = np.matrix([[12, 13],
[11, 10],
[22, 17],
[18, 27],
[31, 14]])
new_df = pd.concat([df, pd.DataFrame(newArr)], axis = 1)
print(new_df)
Output
使用 random.rand() 和 reshape() 将 NumPy 数组转换为 DataFrame
我们可以生成一些随机数(使用 random.rand()),并使用 reshape() 以二维 NumPy 数组格式重塑整个对象。
然后我们可以将其转换为 DataFrame。这是一个代码片段,展示了如何实现它。
import numpy as np
import pandas as pd
arry = np.random.rand(8).reshape(2, 4)
print("Numpy array:")
print(arry)
# convert numpy array to dataframe
df = pd.DataFrame(arry, columns = ['C1', 'C2', 'C3', 'C4'])
print("\n Pandas DataFrame: ")
print(df)
Output
使用 tolist() 将 NumPy 数组添加到 Pandas DataFrame
我们还可以使用 NumPy 的 tolist() 方法来获取整个 NumPy 数组并将其作为 DataFrame 列的一部分。
语法如下: dataframe_object[‘column_name’] = ndarray_object.tolist() 下面是显示如何使用它的代码片段。
import numpy as np
import pandas as pd
df = pd.DataFrame({'value1': [25, 12, 15, 14, 19],
'value2': [52, 17, 12, 9, 41],
'value3': [10, 30, 15, 11, 14]})
new = np.array([3, 7, 1, 0, 5])
df['Newcol'] = new.tolist()
print(df)
Output
通过 np.zeros() 创建 DataFrame
我们还可以通过实现 numpy.zeros() 创建一个 DataFrame。这样的 ndarray 将具有全零值,并且也将使用相同的值来创建 DataFrame。
这是一个代码片段,展示了如何实现它。
import numpy as np
import pandas as pd
arry = pd.DataFrame(np.zeros((5, 3)))
print("Numpy array:")
print(arry)
df = pd.DataFrame(arry, columns = ['C1', 'C2', 'C3'])
df = df.fillna(0)
print("\n Pandas DataFrame: ")
print(df)
Output
使用 NumPy 数组的 random.choice() 创建 DataFrame
从 DataFrame 创建 NumPy 数组的另一种方法是使用 random.choice() 并将其放置在 DataFrame() 构造函数中,以直接将特定大小的 NumPy 数组转换为 DataFrame。这是一个展示如何实现它的脚本。
import numpy as np
import pandas as pd
df = df = pd.DataFrame(np.random.choice(12, (3, 4)), columns = list('ABCD'))
print("\n Pandas DataFrame: ")
print(df)
Output
创建 DataFrame 之前转置 NumPy 数组
我们可以创建 NumPy 数组的转置并将其放置在 DataFrame 中。这是一个代码示例,展示了如何实现它。
import numpy as np
import pandas as pd
arry = np.array([[4, 8], [15, 18], [18, 21], [13, 19],
[10, 15], [7, 12], [4, 2], [5, 1], [8, 4], [9, 24],
[23, 35], [10, 22], [12, 27]])
arry_tp = arry.transpose()
print(arry_tp)
print()
df = pd.DataFrame({'col1': arry_tp[0], 'col2': arry_tp[1]})
print(df.tail())
Output
从空 NumPy 数组创建空 DataFrame
我们可以从存储 NaN(非数字)值的 NumPy 数组创建一个空 DataFrame。这是一个代码片段,展示了如何实现它。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.nan, index = [0, 1, 2], columns = ['A', 'B', 'C', 'D'])
df = df.fillna(' ')
print(df)
Output
通过 NumPy 数组的迭代生成 DataFrame
我们可以在 DataFrame() 构造函数中运行隐式迭代,如列表理解,该构造函数可以利用 NumPy 数组基于 shape() 迭代 ndarray 元素。
它最终可以从 ndarray 中为我们提供一个 DataFrame。这是一个显示如何执行它的脚本。
import pandas as pd
import numpy as np
arry = np.array([[2, 4, 6],
[10, 20, 30]])
df = pd.DataFrame(data = arry[0:, 0:],
index = ['Row-' + str(g + 1)
for g in range(arry.shape[0])],
columns=['Column-' + str(g + 1)
for g in range(arry.shape[1]) ])
print(df)
Output