使用python对csv或者是excel文件进行处理的时候,经常会使用到第三方库:pandas,并且在pandas中经常会使用到的是表结构的数据结构:DataFrame(pandas读取csv文件返回的就是DataFrame数据类型),下面是关于DataFrame的一些基本操作
1. 创建DataFrame
创建DataFrame有以下两种常用的方法进行创建:① 列表 ② 字典 ③随机数组
创建data的时候需要调用pandas中的DataFrame函数并且一般需要传入data、index、columns参数,data表示数据,index表示行标签,column表示列标签
列表:一般使用一维列表或者是二维列表创建
arr = [1, 2, 4, 6, 6]
index = [0, 1, 2, 3, 4]
columns = ["colum"]
# data表示数据, index表示行标签, column表示列标签
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
# 使用二维列表来DataFrame
arr = [[1, 2, 3], [3, 4, 5], [4, 5, 6]]
index = [0, 1, 2]
columns = list("abc")
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
arr = [["Apple", 10], ["Banaana", 2], ["Orange", 5]]
index = [1, 2, 3]
columns = ["fruit", "price"]
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
字典:使用字典创建DataFrame的时候键表示的列索引
data = pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab'))
print(data)
data = pd.DataFrame([{'name': 'tom', 'age': 24, 'hometown': 'xz'}, {'name': 'alex', 'age': 34}])
print(data)
numpy数组:使用numpy随机数组创建
# 使用numpy创建Dataframe
data = np.random.randn(4, 5)
index = [i for i in range(4)]
columns = list("abcde")
data = pd.DataFrame(data=data, index=index, columns=columns)
print(data)
2. DataFrame的几个常见的属性
dtypes 列数据类型
ndim 维度
index 行索引
columns 列索引
values 维ndarry的数组
3. 对某一列进行排序(创建的DataFrame需要有列名)
data = pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab'))
print(data)
print(data.sort_values(by="age", ascending=False))
4. loc与iloc函数:获取某一行或者是某一个位置的数据
loc可以通过行标签获取某一行或者是某几行(切片操作)的数据,通过行标签与列标签获取某一行某一列的数据,iloc通过行下标获取某一行、某几行的数据,通过行下标与列下标获取某一行某一列的数据,iloc只能够传入整数或者是切片(前面的i表示的是整数),不能够传递行标签或者是列标签
data = pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab'))
print(data)
# 通过行标签获取某一行的值
print(data.loc["a"])
# 获取行标签为0列标签为name的数据
print(data.loc[0, "name"])
# 获取第0列
print(data.iloc[:, [0]])
# 获取第0行的数据
print(data.iloc[0])
# 使用切片获取前两行的数据
print(data.iloc[:2])
# 获取第0行第1列的数据
print(data.iloc[0, 1])
5. 通过列标签:data["列标签"](在创建DataFrame时候传入了colums属性的时候才可以使用)或者是列下标:data[index](index表示第几列)获取DataFrame的某一列的数据,获取列的类型为pandas.core.series.Series
data = pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab'))
print(data)
print(data["name"])
# 在没有规定columns属性的情况下可以使用data[列下标]来获取对应的列
data = pd.DataFrame(data=[[1, 2], [3, 4]])
print(data[0])
import pandas as pd
import numpy as np
if __name__ == '__main__':
# 1. 使用列表来创建DataFrame
arr = [1, 2, 4, 6, 6]
index = [0, 1, 2, 3, 4]
columns = ["colum"]
# data表示数据, index表示行标签, column表示列标签
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
# 使用二维列表来创建DataFrame
arr = [[1, 2, 3], [3, 4, 5], [4, 5, 6]]
index = [0, 1, 2]
columns = list("abc")
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
arr = [["Apple", 10], ["Banaana", 2], ["Orange", 5]]
index = [1, 2, 3]
columns = ["fruit", "price"]
data = pd.DataFrame(data=arr, index=index, columns=columns)
print(data)
# 使用numpy创建Dataframe
data = np.random.randn(4, 5)
index = [i for i in range(4)]
columns = list("abcde")
data = pd.DataFrame(data=data, index=index, columns=columns)
print(data)
print("-" * 50)
# 2. 使用字典创建DadaFrame, 字典的key是列索引
data = pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab'))
print(data)
data = pd.DataFrame([{'name': 'tom', 'age': 24, 'hometown': 'xz'}, {'name': 'alex', 'age': 34}])
print(data)
# 3. DataFrame的基本属性
print(data.shape[0], data.shape[1])
# dtypes列数据类型
print(data.dtypes)
print("*" * 50)
# 对某一列进行排序
print(data.sort_values(by="age", ascending=False))
# 4. 索引与切片
print(data.loc[0, "name"])
print(data.iloc[:, [0]])
print("*" * 50)
# 获取对应的列
print(data["name"])
print("*" * 50)
6. 取出某一列中的符合某个条件的行:使用条件表达式来获取(先获取列然后再获取行)
import pandas as pd
import numpy as np
if __name__ == '__main__':
arr = [[1, 2], [3, 4], [5, 6]]
data = pd.DataFrame(data=arr)
# print(data)
# 取出第0列中数值大于2的行, 如果在创建DataFrame的时候没有规定列标签那么可以使用data[n]的方式来获取第n列的值, 如果规定了columns属性值那么需要使用data["列标签"]的方式来获取
print(data[data[0] > 2])