1、创建对象
import pandas as pd
print(pd.Series([1,2,3,4,5], index=list("abcde")))
a 1
b 2
c 3
d 4
e 5
dates = list('ABCDEF')
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
Columns: 列名
index: 行名
A B C D
A 0.924594 -0.053096 -0.251685 0.986537
B 0.521780 1.161101 0.974749 0.301026
C -1.717383 0.159148 -0.642872 0.804738
D -0.591834 -0.869854 0.513973 -0.411427
E 0.144160 -1.047797 -0.325710 0.086812
F 0.015615 1.244260 -0.297587 2.144072
df = pd.DataFrame({1:[1,2,3],2:2,3:3}, index=["he","ha","hu"])
字典的每一项相当于一列,之后组织起来形成一个表。index是哈希的对象,columns只不过是向上堆叠而已。
1 2 3
he 1 2 3
ha 2 2 3
hu 3 2 3
head(),tail()接口查看元素
dates = list('ABCDEF')
df = pd.DataFrame({1:[1,2,3],2:2,3:3}, index=["he","ha","hu"])
print(df.head(1))
print("")
print(df.tail(2))
1 2 3
he 1 2 3
1 2 3
ha 2 2 3
hu 3 2 3
print(df.index)
print(df.columns)
Index(['he', 'ha', 'hu'], dtype='object')
Int64Index([1, 2, 3], dtype='int64')
print(df.describe())
df = pd.DataFrame({1:np.random.random((6)),2:np.random.random((6)),3:np.random.random((6))}, index=list("abcdef"))
print(df)
df = df.sort_index(axis=0, ascending=False)
print(df)
df = df.sort_index(axis=1, ascending=False)
print(df)
df = df.sort_values(by = 2, ascending=False)
print(df)
df = df.sort_values(by = 2)
print(df)
按索引排序·,按行排序,按列排序,按某一列的值排序
希望获取元素:
如果是希望获取列: 则通过df["A"]即可,如果希望获取某个位于某行某列的元素,用df.loc[index, columns]即可,
注意,index,columns可以是数组
df = pd.DataFrame({"数学":np.random.normal(120, 10, (100)),"英语":np.random.normal(130, 5, (100)),
"计算机":np.random.normal(85, 5, (100))},
index=list(range(100)))
print(df.index)
print(df.loc[[99, 88],["数学","英语"]])
print(df.iloc[[99, 88],[1,2]])
注意iloc和loc的区别,iloc是只能接受数字索引,loc只接受实际的文字索引。loc更加方便一些。
类似于numpy,但是只支持对列做这种操作
df[df["数学"]>130]
列可以直接做修改
df['数学'] = [i for i in range(0, 200, 2)]
print(df)
df['数学'].isin([12, 13, 14])
利用is_in,传入一个值的列表,可以支持比较复杂的bool表达式
df['sum'] = [sum(df.loc[i, :]) for i in range(100)]
print(df)
添加属性列
空值相关:
过滤和填充 dropna和fillna函数:
df = pd.DataFrame({"数学":np.random.normal(120, 10, (100)),"英语":np.random.normal(130, 5, (100)),
"计算机":np.random.normal(85, 5, (100)), "sum":np.nan},
index=list(range(100)))
df.loc[[1,2,3],["sum"]] = [[5],[2],[5]]
print(df.dropna())
print(df.fillna(4))
在某条轴线上应用函数
print(df.apply(lambda x: x["数学"], axis=1))
print(df.apply(np.cumsum, axis=0))
axis = 1表水平方向, axis = 0表示竖直方向
增加属性列很简单,怎么增加行呢?
可以用
pd.concat()
传入一个数组,并选 ignore_index=True, 这样可以实现拼接
两张表根据主键做自然连接
pd.merge(left,right, on='key')
追加行,性质类似于把一张表合并到另一张表里面去
df.append(df2, ignore_index=True)
和pd.concat()效果很类似,不同之处在pd.concat()支持拼接多个表,而df.append()只支持拼接两个表
df,groupby([]) 按照属性分组,之后可以调用函数统计每个组的一些数据
、、、