三天做完pandas数据分析50题第一天
- 第1题 将python的list转换为Series
- 第2题 将字典转换为Series
- 第3题 将Series转换成python的list
- 第4题 使用numpy创建series。
- 第5题 如何为Series添加新的元素?
- 第6题 使用字典创建DataFrame
- 第7题 给DataFrame设置索引列
- 第8题 生成一个月的所有天
- 第9题 生成一年中所有的周一
- 第10题 生成一天中所有的小时
- 第11题 创建一个DataFrame,一列是一个月中每天的日期,另一列是对应日期在当年的第几天?
- 第12题 删除列
第1题 将python的list转换为Series
将列表scores = [90, 85, 95, 97, 89, 100]转换为Series?
解析:使用pd.Series()方法,将列表直接作为参数传递进去。
import pandas as pd
scores = [90, 85, 95, 97, 89, 100]
series = pd.Series(scores)
print(series)
结果如下:
第2题 将字典转换为Series
如何将存有学生成绩的字典scores = {"小明":80, "小张":85,"小李":70}转换为Series?
解析:将字典直接传入pd.Series()中。
import pandas as pd
scores = {"小明":80, "小张":85,"小李":70}
series = pd.Series(scores)
print(series)
结果如下:
需要注意的是,当传入列表的时候,索引是数字索引,当传入字典的时候,索引是字典的key。
第3题 将Series转换成python的list
解析:可以使用Series的tolist()方法实现。
import pandas as pd
scores = {"小明":80, "小张":85,"小李":70}
series = pd.Series(scores)
score_list = series.tolist() # 将Series转换成列表
print(score_list)
第4题 使用numpy创建series。
如何使用numpy创建如下的Series?
解析:代码如下:
import pandas as pd
import numpy as np
s = pd.Series(
np.arange(11,20),
index=np.arange(1,10),
dtype='float'
)
第5题 如何为Series添加新的元素?
已知存在一个学生身高的series如下:
heights = {'xiaoming': 180, 'xiaozhang': 175, 'xiaowang': 190, 'xiaowu': 183}
s = pd.Series(heights)
如何为这个Series添加两个新的元素,“xiaoliu”身高178,“xiaozhao”身高176?
解析:可以先构造一个新的Series,然后使用Series的_append方法(最新版的pandas将append方法变为了_append方法)添加新的Series。注意,使用_append方法并不会改变原来的Series,需要使用变量接收。
import pandas as pd
heights = {'xiaoming': 180, 'xiaozhang': 175, 'xiaowang': 190, 'xiaowu': 183}
s = pd.Series(heights)
s1 = pd.Series({'xiaoliu': 178, 'xiaozhao': 176})
s = s._append(s1)
s的结果如下:
第6题 使用字典创建DataFrame
解析:将字典直接传入pd.DataFrame()方法中即可使用字典创建DataFrame。
import pandas as pd
df = pd.DataFrame(
{
'name': ['xiaoming', 'xiaozhang', 'xiaowang'],
'height':[180, 175, 190],
'score':[94, 78, 80]
}
)
DataFrame的效果如下:
那如果将key为score的值列表改为[94, 78, 80, 99] ,即多了一个元素会怎么样呢?会报如下错误:ValueError: All arrays must be of the same length,即所有的arrays都必须有相同的长度。
第7题 给DataFrame设置索引列
接上题,如何将DataFrame的name列设置为索引列?
解析:使用DataFrame的set_index()方法,如需直接修改DataFrame,需要添加参数inplace=True。
import pandas as pd
df = pd.DataFrame(
{
'name': ['xiaoming', 'xiaozhang', 'xiaowang'],
'height':[180, 175, 190],
'score':[94, 78, 80]
}
)
df.set_index('name', inplace=True)
效果如下:
第8题 生成一个月的所有天
解析:使用pd.date_range()方法:
# 第一种方法
import pandas as pd
date_range = pd.date_range(start='20240101', end='20240131')
# 第二种方法
date_range = pd.date_range(start='20240101', periods=31)
第9题 生成一年中所有的周一
解析:还是使用pandas的date_range()方法,需要添加参数freq=‘W-MON’:
import pandas as pd
date_range = pd.date_range(start='2023-01-01', end='2023-12-31', freq='W-MON')
第10题 生成一天中所有的小时
import pandas as pd
date_range = pd.date_range('2024-04-11', periods=24, freq='H')
第11题 创建一个DataFrame,一列是一个月中每天的日期,另一列是对应日期在当年的第几天?
解析:使用pd.DataFrame()和pd.date_range()方法来创建。
import pandas as pd
date_range = pd.date_range('2024-03-01', periods=31, freq='D')
df = pd.DataFrame(date_range, columns=['day'])
df['dayofyear'] = df['day'].dt.dayofyear
DataFrame的效果如下(部分截图):
第12题 删除列
import pandas as pd
df = pd.DataFrame(
{
'name': ['xiaoming', 'xiaozhang', 'xiaowang'],
'height':[180, 175, 190],
'score':[94, 78, 80]
}
)
df.drop(columns=['height','score'],inplace=True)