【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(2)

1.创建DataFrame

data = {"col1":['Python', 'C', 'Java', 'R', 'SQL', 'PHP', 'Python', 'Java', 'C', 'Python'],
       "col2":[6, 2, 6, 4, 2, 5, 8, 10, 3, 4], 
       "col3":[4, 2, 6, 2, 1, 2, 2, 3, 3, 6]}
df = pd.DataFrame(data)
df
col1col2col3
0Python64
1C22
2Java66
3R42
4SQL21
5PHP52
6Python82
7Java103
8C33
9Python46

2. 设置索引

df['new_index'] = range(1,11)
df.set_index('new_index')
col1col2col3
new_index
1Python64
2C22
3Java66
4R42
5SQL21
6PHP52
7Python82
8Java103
9C33
10Python46

3.更改列名

#方法二:(使用rename()函数:修改指定修改某列或某几列名字)
df.rename(columns={'col1':'grammer', 'col2':'score', 'col3':'cycle','new_index':'id'}, inplace=True)
df.head()
grammerscorecycleid
0Python641
1C222
2Java663
3R424
4SQL215

4.更改全部列顺序

order = df.columns[[0, 3, 1, 2]] # 或者order = ['xx', 'xx',...] 具体列名
df = df[order]
df
scoreidgrammercycle
061Python4
122C2
263Java6
344R2
425SQL1
556PHP2
687Python2
7108Java3
839C3
9410Python6

5.提取第一列位置在1,10,15上的值

# 方法一:
df.iloc[[1,10,15], 0]
# 方法二:
df['createTime'][[1,10,15]]
# 方法三:
df['createTime'].take([1,10,15])

out:
1 2020-03-16 10:58:48
10 2020-03-16 10:34:19
15 2020-03-16 10:52:14
Name: createTime, dtype: datetime64[ns]

6.判断数据框中所有行是否存在重复

df.duplicated()

7. 判断education列和salary列数据是否重复(多列组合查询)

df.duplicated(subset = ['education','salary'])

8.提取value列元素值大于60小于70的行

df[(df['value'] > 60) & (df['value'] < 70)]

9.提取salary列包含字符串(‘–’)的行

# 方法一:isin()
df[df['salary'].isin(['--'])]
# 方法二:contains()
df[df["salary"].str.contains("--")]

10.提取value列和value1列出现频率最高的数字

# 先将两列使用append()按行合并,再用计数函数:
temp = df['value'].append(df['value1'])
temp.value_counts(ascending=False)#不加index,返回的是一个Series
temp.value_counts(ascending=False).index[:5] #返回一个数组

作业

import pandas as pd
import numpy as np
import re

data = pd.read_excel(r'pandas120.xlsx')
df = pd.DataFrame(data)

# 提取学历为本科,工资在25k-35k的数据

df1 = df.loc[df['education'].isin(['本科']) & df['salary'].isin(['25k-35k']), :]

# 提取salary列中以'40k'结尾的数据

df2 = df[df['salary'].str.endswith('40k')]

# 提取薪资区间中最低薪资与最高薪资的平均值大于30k的行,只需提取原始字段('createTime', 'education', 'salary')即可

salary = df
tmp = salary['salary'].str.extract(r'(\d+).*?(\d+)') # 正则匹配,分割字符串
salary['avg'] = ((tmp[0].astype('int') + tmp[1].astype('int')) / 2) # 切记 相加记得加小括号
df3 = salary[salary['avg'] > 30]
df3 = df3.drop(columns=['avg'])


# 将以上三题提取出来的行按照相同列进行合并,汇总到一个数据框中

answer_2 = pd.concat([df1, df2, df3], axis=0)

# 将三列数据合并成一列,并设置列名为answer,最后保留id(数据行数、answer)

data = pd.concat([answer_2.iloc[:, 0], answer_2.iloc[:, 1], answer_2.iloc[:, 2]])
df = pd.DataFrame(data, columns=['answer'])
df['id'] = range(len(df))
df = df[['id', 'answer']]

# 将结果保存为 csv 文件

df.to_csv(r'answer_2.csv', index=False, encoding='utf-8-sig')

收获

  • · inplace = True表示在原DataFrame上进行操作 · pf.columns[索引]返回的是一个Index列表,可以用来作为.iloc[]的参数

  • · Pandas的insert()函数允许用户在指定的位置插入行和列。下面是insert()函数的语法:
    DataFrame.insert(loc, column, value, allow_duplicates=False)
    参数说明:
    • loc:表示要插入的数据的位置,以整数形式表示。
    • column:要插入的列名(如果未指定值,则必须传递列名)
    • value:要插入的值。可以是单个值或一组值。
    • allow_duplicates:如果设为True时,允许在同一位置上重复列名。
    ps:已经存在的列的列名不能重复添加

  • · DataFrame对象
    take函数是一个用于返回指定的行的函数。
    语法:DataFrame.take(indices, axis=0, convert=None):
    参数:
    • indices:行的索引值(int或者list of ints)。
    • axis:可选参数,默认值为0。
    • convert: 可选参数,默认值为None。是否将索引转换为相应的列标签。
    返回:Ndarray或者其他可迭代对象中存储的行元素。

  • ·df.[] 里面也能对type为Series,数据为bool进行df数据筛选

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂尾主教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值