pandas基础

list转化为series

data = [1,2,3,4,5,6]
array = np.array(data)
array_str = array.astype('str') #数据类型转换为字符串
print(array)

series转化为list

ori_cent_date = pd.read_excel('/tmp/核心数据库.xlsx')
ip_list = ori_cent_date.IP.tolist()

创建Series

a = [1,2,3,4,5,6]
b = range(1,7)
a_series = pd.Series(a,index = ['A','B','C','D','E','F'])
b_series = pd.Series(b,index = ['A','B','C','D','E','F'])

字典类型可以直接创建Series

# 字典可以直接创建Series

d = {
    'qinlu':'handsome',
    'lulu':'graceful'
}

s2 = pd.Series(d)
print(s2)

print('-----------------------')

# Series有自动对齐索引功能,NaN表示空,缺失
s3 = pd.Series(d,index=['qinlu','lulu','qinqin'])
print(s3)

DataFrame也可以看做一个字典,只不过它的值为一个序列

# DataFrame也可以看做一个字典,只不过它的值为一个序列

import pandas as pd

dict = {
    'name':['张三','李四','王五','金锁'],
    'sex':['','','',''],
    'age':[18,19,20,18]
}

df = pd.DataFrame(dict)

print(df)
print(df.info())

# 转换数据类型astype

print(df.age.astype('str'))

行和列操作

import pandas as pd

dict = {
    'name':['张三','李四','王五','金锁'],
    'sex':['','','',''],
    'age':[18,19,20,18]
}

df = pd.DataFrame(dict)

# 读取列

print(df['age'])
print(df['name'])
print(df[['name','age']])

# 读取行(切片)

print(df[0:3])

# 修改列的值

df['age'] = 18
# df.age = 18
print(df)

df['age'] = [18,19,20,19]
# df.age = [18,19,20,19]
print(df)

# 增加一列

df['country'] = 'chana'
print(df)

# 获取索引信息
print(df.index)

数据筛选

import pandas as pd


dict = {
    'name':['张三','李四','王五','金锁'],
    'sex':['','','',''],
    'age':[18,19,20,18]
}

df = pd.DataFrame(dict)

# 切片
a = df[['age','sex']]
print(a)

# 筛选sex为男,
b = df[df.sex == '']
print(b)

# 筛选年龄大于等于19
c = df[df.age >= 19]
print(c)

#筛选性别为女,年龄小于19
d = df[(df.sex == '') & (df.age < 19)]
print(d)

能进行布尔判断

e = df.sex == ''
print(e)

# 当逻辑条件复杂时,这种写法并不优雅,比如性别为男,且年龄在18岁,以及性别为女,且年龄在18岁以上的两类人群,这种过滤条件就比较复杂了。pandas中可以用query函数以类SQL语言执行查询。
f = df.query('(age == 19 and sex == "女") or (age >= 19 and sex == "男")')
print(f)

# 利用df.age直接运算
df.age = df.age + 1
print(df)

 排序

import pandas as pd
file = '/Users/soymilk/微云同步助手(296672942)/OY/study_happy/python_pandas/pandas_excel/data/List.xlsx'
df = pd.read_excel(file,index_col='ID')
df = df.sort_values(by=['Worthy','Price'],ascending=[False,False]) # 按值进行排序
print(df)

按照条件筛选

'''
筛选
'''
import pandas as pd

def b1830(a):
    return 18 <=a < 30
def b85(b):
    return 85 < b

file = '/tmp/Students.xlsx'
df = pd.read_excel(file,index_col='ID')
df = df.loc[df.Age.apply(b1830)].loc[df.Score.apply(b85)]
print(df)

'''
简化版
'''

# file = '/tmp/Students.xlsx'
# df = pd.read_excel(file,index_col='ID')
# df = df.loc[df.Age.apply(lambda a: 18<=a<30)].loc[df.Score.apply(lambda b: 85<b)]
# print(df)

'''
符合逻辑的版本
'''

# file = '/tmp/Students.xlsx'
# df = pd.read_excel(file,index_col='ID')
# df_filter = df[(18<=df.Age) & (df.Age<30) & (85<df.Score)]
# print(df_filter)

 查看DataFrame属性,数据类型等

print(type(df))   # 查看df的类型
print(df.info())   # 有多少数据类型,整个DataFrame占多少字节
print(df.dtypes)  # 查看DataFrame各个列的数据类型

深刻理解DataFrame 

import pandas as pd
import numpy as np

# 字典形式
data1 = {'地区':['中国','巴西'],'变电站-x':['变电站-A','变电站-B']}
df1 = pd.DataFrame(data1,index=['A','B'])
print(df1)
print('----------------')

# 序列形式
data2 = [['中国','变电站-A'],['巴西','变电站-B']]
df2 = pd.DataFrame(data2,index=['A','B'],columns=['地区','变电站-x'])
print(df2)

 DataFrame修改列名,修改index

修改列名

#
直接修改:缺点必须写明每一列,不然会报错 a.columns = ['A','B','C'] Out[4]: A B C 0 1 4 7 1 2 5 8 2 3 6 9 ##推荐方法 #每个列名都修改 a.rename(columns={'a':'A', 'b':'B', 'c':'C'}, inplace = True) Out[7]: A B C 0 1 4 7 1 2 5 8 2 3 6 9 #修改指定列名 a.rename(columns={'a':'A', 'c':'C'}, inplace = True) Out[14]: A b C 0 1 4 7 1 2 5 8 2 3 6 9 修改index a.set_index('A')

 利用iloc选取列和行

# 选取第2列,选取第2-3列(1:3不包括3,即不包括第4列)

df = df[:,1]

df = df[:,1:3]

# 选取第2行,选取第2-3行(1:3不包括3,即不包括第4行)

df = df[1,:]

df = df[1:3,:]

 删除包含某个字符串的行

# 通过取反获取不包含精准字符串“2000吨”的结果

df=df[~df['产量'].isin(["2000吨"])] 

# 通过取反获取不包含字符串“吨”的结果

df=df[~df['产量'].str.contains('')]

 数据类型转换

# 数据类型转化成字符串
df['2016'] = df['2016'].astype('str')

# 数据类型转化为整型
df['2016'] = df['2016'].astype('int')

# 数据类型转化为浮点型
df['2016'] = df['2016'].astype('float')

 删除列

# 删除列(需要赋值)
df = df.drop(columns=['产量','平均产量'])
# 直接删除
df.drop(columns=['产量','平均产量'],inplace=True)
# 直接删除(只能删除一列)
del df['产量']

 

参考文章:

条件筛选数据:https://www.cnblogs.com/nxf-rabbit75/p/10105271.html

 

posted @ 2020-10-22 17:43  豆浆D  阅读(139)  评论(0编辑  收藏  举报