Pandas入门学习

DataFrame

1
2
3
4
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)

创建

  • 构造方法介绍
1
2
3
4
5
6
7
8
'''
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False
'''
pandas.DataFrame(data, index, columns, dtype, copy)
  • 通过列表创建

    1
    2
    3
    4
    5
    data = [[1, 2, 3], [4, 5, 6]]
    index = ['a', 'b']
    columns = ['A', 'B', 'C']
    df = pd.DataFrame(data=data, index=index, columns=columns)
    print(df.head())
  • 使用ndarrays创建

    1
    2
    3
    data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
    df = pd.DataFrame(data)
    print (df.head())
  • 使用字典创建

    1
    2
    3
    data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
    df = pd.DataFrame(data)
    print (df.head())

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 新增一行
df.loc['h'] = [10, 11, 12]
print(df.head())

# 新增一个df
data = [[1, 2, 3], [4, 5, 6]]
index = ['j', 'k']
columns = ['A', 'B', 'C']
df2 = pd.DataFrame(data=data, index=index, columns=columns)
print(df2.head())

# 连接两个df
# axis表示轴,0表示纵向,1表示横向
pd3 = pd.concat([df, df2], axis=0)
print(pd3.head())

# 新增一列
df2['Tang'] = [12, 13]
print(df2.head())

# 连接两个df
data = [[1, 2], [4, 5]]
index = ['j', 'k']
columns = ['D', 'E']
df4 = pd.DataFrame(data=data, index=index, columns=columns)
print(df4.head())
# axis表示轴,0表示纵向,1表示横向
df5 = pd.concat([df2, df4], axis=1)
print(df5.head())

1
2
3
4
5
6
7
8
9
10
11
12
# axios=0表示删除行
# inplace为False表示不在原df上删除,此时df6没有j这一行,df5还有
df6 = df5.drop(['j'], axis=0, inplace=False)
print(df6.head())

# inplace为True表示在原df上删除
df5.drop(['j'], axis=0, inplace=True)
print(df5.head())

# axios=1表示删除列
df5.drop(['A'], axis=1, inplace=True)
print(df5.head())

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改某个位置的值
df.loc['a']['A'] = 150
print(df.head())

# 修改索引
df.index = ['f', 'g']
df.set_index = ['f', 'g']
print(df.head())
# 重置索引
df.reset_index(inplace=True)
# 修改某个值
for index, row in df.iterrows():
if arr.__contains__(row['name']):
row['age'] = '1'
df.iloc[index] = row

  • 使用单个label值查询

  • 使用值列表查询

    • df.loc[[2009,2010,2011,2012],[‘市’,’产量单位’]]
  • 使用数值区间范围查询

  • 使用条件表达式查询
    df.loc[df[‘年份’]>2015]

  • 调用函数查询

    1
    2
    3
    4
    5
    6
    # lambda
    df[lambda df: (df['年份']>2015) & (df['年份']<2018)]
    # 自定义函数
    def query_def(df):
    return (df['年份']>2015) & (df['年份']<2018)
    df.loc[query_def]

    注意
    ● 以上查询方法,既适用于行,也适用于列
    ● 查询结果会降维,dataFrame>Series>值类型

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查询某一列
print(df['A'])

# 查询某一行, df.iloc[行位置,列位置]
print(df.iloc[0])
print(df.loc['a'])

# 查询具体某个位置
print(df.iloc[0, 1])
print(df.loc['a']['A'])

# 查询某列包含关键词的数据,多个关键词使用|分隔
print(df.loc[df['列名'].str.contains('关键词')])