【01】DataFrame的建立和屬性

【1758872】的博客發表於2024-10-10

DataFrame是一個表格型的資料結構,可以看成就是excel中的表格。

官方文件:https://pandas.pydata.org/docs/reference/frame.html

DataFrame的建立

DataFrame構造方法如下:

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

  • data:DataFrame的資料部分,可以是字典、二維陣列、Series、DataFrame或其他可轉換為DataFrame的物件,若不提供此引數,則建立一個空的DataFrame。
  • index:DataFrame的行索引,用於標識每行資料,可以是列表、陣列、索引物件等,若不提供此引數,則建立一個預設的整數索引。
  • columns:DataFrame的列索引,用於標識每列資料。可以是列表、陣列、索引物件等,若不提供此引數,則建立預設的整數索引。
  • dtype:指定DataFrame的資料型別,可以是NumPy的資料型別,例如np.int64、np.float64等,若不提供此引數,則根據資料自動推斷資料型別。
  • copy:是否複製資料,預設為False,表示不復制資料,若設定為True,則複製輸入的資料。

一維列表建立DataFrame

import pandas as pd

# 例1:單個列表建立
data = ["張三", "李四", "王五", "趙六"]
df = pd.DataFrame(data=data)
df
【01】DataFrame的建立和屬性

二維列表建立DataFrame

import pandas as pd

# 例2:二維列表建立DataFrame,設定列索引
data =[['Alex',10], ['Bob', 12], ['clarke', 13]]
df = pd.DataFrame(data=data, columns=['Name', 'Age'])
df
【01】DataFrame的建立和屬性

傳遞字典建立DataFrame

import pandas as pd

# 使用預設的行索引,注意:傳入字典時字典的KEY成了列索引
data = {'Name': ['Tom', 'Jack', 'steve', 'Ricky'], 'Age': [28, 34, 29, 42]}
df = pd.DataFrame(data)
print(df)
print("*" * 50)
# 設定了行索引
data = {'Name': ['Tom', 'Jack', 'steve', 'Ricky'], 'Age': [28, 34, 29, 42]}
df = pd.DataFrame(data, index=['rank1', 'rank2', 'rank3', 'rank4'])
print(df)
【01】DataFrame的建立和屬性

傳遞字典列表建立DataFrame

import pandas as pd

data = [{'姓名': '張三', '性別': '男'}, {'姓名': '小紅', '性別': '女', '語文': 80}]
# 傳遞字典列表來建立DataFrame
df = pd.DataFrame(data)
print(df)
print('*' * 50)
# 傳遞字典列表和行索引來建立DataFrame
df = pd.DataFrame(data, index=['first', 'second'])
print(df)
print('*' * 50)
# 指定的列索引與字典鍵相同
df = pd.DataFrame(data, index=['first', 'second'], columns=['姓名', '性別'])
print(df)
print('*' * 50)
# 指定的列索引,其中一個索引具有其他名稱
df = pd.DataFrame(data, index=['first', 'second'], columns=['姓名', '班級'])
print(df)
【01】DataFrame的建立和屬性

透過Series物件建立

import pandas as pd

df1 = pd.Series({'california': 423967, 'Texas': 695662, 'New York': 141297, 'Florida': 170312, 'Illinois': 149995})
df2 = pd.Series({'california': 383521, 'Texas': 264193, 'New York': 191127, 'Florida': 195860, 'Illinois': 122135})
# 建立單列的DataFrame
df = pd.DataFrame(df1, columns=['area'])
print(df)
print("*" * 50)
# 建立多列的DataFrame物件
df = pd.DataFrame({'area': df1, 'population': df2})
print(df)
【01】DataFrame的建立和屬性

透過Numpy建立

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
【01】DataFrame的建立和屬性

DataFrame的屬性

dataframe.T

df.T屬性主要用來轉置行和列,和 df.transpose() 實現的效果一樣。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.T)
【01】DataFrame的建立和屬性

dataframe.axes

返回包含行索引和列索引的列表,可以透過 df.axes[0].tolist()list(df.axes[0]) 轉成行索引列表,列索引列表同理。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.axes)  # [Index(['a', 'b', 'c'], dtype='object'), Index(['foo', 'bar'], dtype='object')]
print(df.axes[0].tolist())  # ['a', 'b', 'c']
print(list(df.axes[0]))  # ['a', 'b', 'c']

dataframe.dtypes

檢視每列的資料型別。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.dtypes)
【01】DataFrame的建立和屬性

dataframe.ndim

獲取DataFrame的維數。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.ndim)  # 2

dataframe.shape

獲取DataFrame的行數和列數,是一個元組。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.shape)  # (3, 2)

dataframe.size

返回DataFrame中的元素個數。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.size)  # 6

dataframe.values

返回一個所有行資料組成的二維的陣列,每個元素是一個一維陣列(也就是一行資料),可以透過 list(df.values)df.values.tolist() 轉成python的列表型別。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
# 基於a陣列建立DataFrame
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.values)  # [[8 6] [3 3] [8 7]]
print(list(df.values))  # [array([8, 6], dtype=int32), array([3, 3], dtype=int32), array([8, 7], dtype=int32)]
print(df.values.tolist())  # [[8, 6], [3, 3], [8, 7]]

dataframe.index

獲取行索引,返回的是Index型別,可以透過 list(df.index) df.index.tolist() 轉換成列表。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.index)  # Index(['a', 'b', 'c'], dtype='object')
print(df.index.values)  # ['a' 'b' 'c']
print(list(df.index))  # ['a', 'b', 'c']
print(df.index.tolist())  # ['a', 'b', 'c']

dataframe.columns

獲取列索引,返回的是Index型別,可以透過 list(df.columns)df.columns.tolist() 轉換成列表。

import pandas as pd
import numpy as np

a = np.random.randint(1, 10, (3, 2))
df = pd.DataFrame(a, columns=['foo', 'bar'], index=['a', 'b', 'c'])
print(df)
print("*" * 50)
print(df.columns)  # Index(['foo', 'bar'], dtype='object')
print(df.columns.values)  # ['foo' 'bar'],可用 df.columns.values.tolist() 轉換成列表
print(list(df.columns))  # ['foo', 'bar']
print(df.columns.tolist())  # ['foo', 'bar']

相關文章