Skip to main content

基础使用

image-20220817110038914

基础使用

安装依赖

./python.exe -m pip install xlrd pandas

数据处理

主要格式

  • Series 一维列表
  • Dataframe 二维矩阵

处理流程

input > handler > dataframe > Series
输入数据| 处理成 dataframe格式 | 对series操作

Series列表

基础语法

pandas.Series( 
data, # 一组数据(ndarray 类型)。
index, # 给予一个数据索引标签,如: ["x", "y", "z"],让数据可以通过标签访问
dtype, # 数据类型,默认会自己判断。
name:str, # 设置名称。
copy:bool # 拷贝数据,默认为 False。
)

从列表创建

data = [1,2,3]
data_index = ["x", "y", "z"]

data_series = pd.Series(data, index=data_index) # 指定一个索引
data_series = pd.Series(data, index=data_index, name="坐标信息") # 给予一个名称

print(data_series)

从对象创建

data = {"x":1, "y":2, "z":3}

data_series = pd.Series(data) # 完整转换
data_series = pd.Series(data, index=["z"]) # 仅转换指定标签


print(data_series["x"])

数据读取


Dataframe

pandas.DataFrame( 
data, # 一组数据(ndarray、series, map, lists, dict 等类型)。
index, # 索引值,或者可以称为行标签。
columns, # 列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
name:str, # 设置名称。
copy:bool # 拷贝数据,默认为 False。
)

  • 根据索引,既实例化时,index的值来获取
data = Dataframe()

# 根据索引,对应excel最左边的那一列
# 从索引1,到索引为2的行的内容,不包括索引2
data[1:2]

# 从索引为1开始获取,到索引2的行,包括索引2
data.loc[1:2]

# 获取索引1和索引3的数据
data.loc[[1,3]]


# 获取索引为1,到索引为2的行的内容,不包括索引2
# 此处键入的行索引或列索引,必须使用数据结构
data.iloc[1:2]

loc中所传入的参数值为实例化DataFrame时的索引值,不是位置的值,也不能理解成位置

因为在本例中实例化DataFrame时我们并未传入index参数,所以会生成一个默认的索引序列(从0开始的递增序列),所以本例的索引序列刚好和位置序列相同了,所以才会造成lociloc并无区别的假象。在实际使用中,如果index(索引)序列为['a', 'b', 'c', 'd', 'e']时,那么我们如果使用loc获取行数据时,应该传入的参数就是index序列中的值。

行遍历

dataframe的遍历不能直接使用for+切片的方式,否则其效率会非常非常低,推荐使用itertuples(),将每行数据转换成一个nametuple

  • itertuples
# 注意这种方式,行的第一个元素是索引
for each_row in dataframe.itertuples()
# 实际数据从索引1开始
for each in each_row[1:]:
each
  • apply
def method3_times(DF):
DF[‘eee’] = DF.apply(lambda x: x.aaa * x.bbb, axis=1)
  • for + iloc/loc (很慢,可读性也很差)
for row_index in range(dataframe.shape[0]):
dataframe.iloc[ row_index:row_index+1 ]

速度比较:

运行速度:np数组操作 > pd数组操作 >>> np列表构造 = pd列表构造 >>> for循环+at > pd(分片).apply > pd.apply >>> pd.iterrows > for循环+ilo

data = Dataframe()

# 查询指定列
data['column_name']
data.column_name

# 查询指定列内,指定行的内容
data[<rowStartIndex>:<rowEndIndex>,['column_name']]
data[行开始:行结束,['column_name']]

# loc、iloc、等跟行操作相似,只是入参形式改为列

数据导出

  • 字典
df = pd.DataFrame(
{
"A": ["one", "one", "two", "three"] * 3,
"B": ["A", "B", "C"] * 4,
"C": ["foo", "foo", "foo", "bar", "bar", "bar"] * 2,
"D": np.random.randn(12),
"E": np.random.randn(12),
}
)

data["0:3"] = [df[0:3]]
data["4:6"] = [df[4:6]]
new_data = pd.DataFrame(data)

文献