day7--pandas

pandas–数据分析处理库

DataFrame

DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。

  1. –将单位为mg转换为g(除以1000)
    print(food_info[“Iron_(mg)”])
    div_1000 = food_info[“Iron_(mg)”] / 1000
    print(div_1000)

    –向列中的每个值添加100,并返回一个Series对象
    add_100 = food_info[“Iron_(mg)”] + 100
    print(add_100)

    –从列中的每个值减去100并返回一个Series对象
    sub_100 = food_info[“Iron_(mg)”] - 100
    print(sub_100)

    –将列中的每个值乘以2并返回一个Series对象
    mult_2 = food_info[“Iron_(mg)”]*2
    print(mult_2)

  2. #Score=2×(Protein_(g))−0.75×(Lipid_Tot_(g))
    weighted_protein = food_info[“Protein_(g)”] * 2
    weighted_fat = -0.75 * food_info[“Lipid_Tot_(g)”]
    initial_rating = weighted_protein + weighted_fat
    print(initial_rating)

  3. #“Vit_A_IU”列从0到100000,而“Fiber_TD_(g)”列从0到79,对于某些计算,像“Vit_A_IU”这样的列可以对结果产生更大的影响。
    max_calories = food_info[“Energ_Kcal”].max() #“Energ_Kcal”列中的最大值。
    print(max_calories)

#用“Energ_Kcal”中的值除以最大的值。
normalized_calories = food_info[“Energ_Kcal”] / max_calories
normalized_protein = food_info[“Protein_(g)”] / food_info[“Protein_(g)”].max()
normalized_fat = food_info[“Lipid_Tot_(g)”] / food_info[“Lipid_Tot_(g)”].max()
food_info[“Normalized_Protein”] = normalized_protein
print(food_info[“Normalized_Protein”])
food_info[“Normalized_Fat”] = normalized_fat
print(food_info[“Normalized_Fat”])

  1. 默认情况下,panda将按我们指定的列按升序排序数据,并返回一个新的DataFrame,对DataFrame进行就地排序,而不
    是返回一个新的DataFrame。是返回一个新的DataFrame。

food_info.sort_values(“Sodium_(mg)”, inplace=True)
print(food_info[“Sodium_(mg)”]) #打印food_info [" Sodium_ (mg)”)

#ascending升序,越来越大;descending降序,越来越小,pandas默认升序。

food_info.sort_values(“Sodium_(mg)”, inplace=True, ascending=False) #按降序排序,而不是按升序排序。
print(food_info[“Sodium_(mg)”])

  1. 读csv文件,读取前五行数据
    import pandas as pd
    import numpy as np
    titanic_survival = pd.read_csv(“titanic_train.csv”)
    titanic_survival.head() #head无参数,默认前五行

  2. panda库使用NaN(代表“非数字”)表示缺失值。我们可以使用pandas.isnull()函数,来判断是否为空。如果为空,则返回true,否则为false。

age = titanic_survival[“Age”]
print(age.loc[0:10]) ##显示age数据的0——10行
age_is_null = pd.isnull(age)
print(age_is_null) #判断空值输出true,不为空输出false
age_null_true = age[age_is_null] #将age_is_null的值为true的留下来,把age_is_null值为false的过滤掉
print(age_null_true) #打印所有的缺失值
age_null_count = len(age_null_true)
print(age_null_count) #打印缺失值个数

  1. 丢失数据是如此常见,以至于许多panda方法会自动对其进行过滤
    correct_mean_age = titanic_survival[“Age”].mean() #直接用Pandas中自带的mean()函数求平均
    print(correct_mean_age)
    注意:其实直接滤去缺失值的样本并不是一个很好的方法,其实我们可以拿年龄的平均数、中位数、重数进行一个填充。

  2. 求每类船舱对应的平均票价(用for循环的方式求出平均) (该方法较为麻烦)
      要求:船舱等级一共有[1,2,3]三种,分别对应不同的票价,所以每一级船舱都有自己的平均票价。求每级船舱的平均票价。
    过程:通过for循环对每一类船舱进去抽取,抽取出属于同一类船舱等级的船客的全部信息,再从每一个分类船客中抽出“Fare”(船票价格)这列数据,对其用,mean()函数求平均,再返回给每一类的类别。
    passenger_classes = [1, 2, 3] #船舱等级用list列出[1,2,3]
    fares_by_class = {} #定义空的字典,用来存放船舱等级以及对应的平均票价
    for this_class in passenger_classes: #对每一类船舱进行循环
    pclass_rows = titanic_survival[titanic_survival[“Pclass”] == this_class] #当this_class = 1时,返回的是所有一等舱的船客的信息
    pclass_fares = pclass_rows[“Fare”] #再从每次取得的信息中,返回“Fare”(票价)这列的数据
    fare_for_class = pclass_fares.mean() #用.mean()对票价求平均
    fares_by_class[this_class] = fare_for_class #将对应的平均票价传给对应的船舱
    print(fares_by_class)

—{1: 84.15468749999992, 2: 20.66218315217391, 3: 13.675550101832997}

  1. 用pandas自带的函数.pivot_table()来统计船舱等级与平均票价的关系
    .pivot_table() : 相当于一个数据透视表,也相当于统计一个量与其他量之间关系的一个函数
    .pivot_table()有三个参数:
    index:表示接下来要统计的信息是以谁为基准的,index就 = 谁
               values:表示用统计index与谁之间的关系,values就 = 谁
    aggfunc:表示index与values之间的什么关系,aggfunc就 = 什么关系(不写的话,默认求均值)

passenger_survival = titanic_survival.pivot_table(index=“Pclass”, values=“Survived”, aggfunc=np.mean) #每个船舱等级对应的平均票价,所以index = Pclass船舱等级;Pclass与票价之间的关系,values = Fare;求的是船舱等级与票价的平均值之间的关系,所以aggfunc=np.mean()
print(passenger_survival)

—Pclass
1 0.629630
2 0.472826
3 0.242363
Name: Survived, dtype: float64

  1. .用.pivot_table()求每类船舱对应的平均年龄
    passenger_age = titanic_survival.pivot_table(index=“Pclass”, values=“Age”)
    passenger_age = titanic_survival.pivot_table(index=“Pclass”, values=“Age”)
    print(passenger_age)

—Pclass
1 38.233441
2 29.877630
3 25.140620
Name: Age, dtype: float64

  1. 用.pivot_table()看一个量与其他两个量之间的关系
    需求:想要看不同的登船地点(C,Q,S)的总的票价和总的获救人数。
    过程:用.pivot_table()的话,对于index ,接下来要统计的东西是以登船地点为基准的,所以index = “Embarked”
    对于values,要统计的是不同登船地点与票价和是否获救之间的关系,所以values = [“Fare”,“Survived” ]
    对于aggfunc,要统计的是不同登船地点的总的票价和总的获救人数,所以aggfunc = np.sum

port_stats = titanic_survival.pivot_table(index=“Embarked”, values=[“Fare”,“Survived”], aggfunc=np.sum)
port_stats = titanic_survival.pivot_table(index=“Embarked”, values=[“Fare”,“Survived”], aggfunc=np.sum)
print(port_stats)

— Fare Survived
Embarked
C 10072.2962 93
Q 1022.2543 30
S 17439.3988 217

  1. 用.dropna()扔掉具有缺失值的行
    drop_na_columns = titanic_survival.dropna(axis=1) #指定axis=1或axis='columns’将删除任何具有null值的列
    new_titanic_survival = titanic_survival.dropna(axis=0,subset=[“Age”, “Sex”]) #看一些Age和Sex这两列有没有缺失值的,如果有,就把具有缺失值的这行数据扔掉。
    print(new_titanic_survival)

  2. 用.loc()确定到每一个坐标上的数据(数据中每一个具体的值都是由一个行号和列名唯一确定的,所以完全可以用行号和列名来返回这个位置上的值.)
    row_index_83_age = titanic_survival.loc[83,“Age”]
    row_index_1000_pclass = titanic_survival.loc[766,“Pclass”]
    print(row_index_83_age)
    print(row_index_1000_pclass)
    —28.0
    1

  3. 用.sort_values()进行数据的重新排序,并用.reset_index()重置排序后的index值(即行号)
    用.sort_values()对数据进行排序后,虽然行的顺序因为排序条件发生了变化,但是其行号却还保持着之前的样子,为了让排序后的数据的行号变成从0开始,依次增大,所以运用.reset_index()进行重置

new_titanic_survival = titanic_survival.sort_values(“Age”,ascending=False) #根据“Age”的大小逆序排列。
print(new_titanic_survival[0:10]) #打印未进行.reset_index时的数据前10行
titanic_reindexed = new_titanic_survival.reset_index(drop=True)
print(titanic_reindexed.iloc[0:10])

  1. apply(自定义函数名) 的功能,可以通过写apply()函数,而这个apply()函数就相当于我们可以进行一个自定义函数的操作。
    在apply()中传进来的是一个函数名,而传进来的函数可以是自己定义的函数,即将自己的操作定义成一个函数的形式,然后apply一下,这时就会在这个DataFrame中执行这个操作了。

    我们想要返回数据集合的第100行数据。过程:先定义一个返回第100行数据的函数hundredth_row ,然后在apply一下
    def hundredth_row(column): #定义一个新的函数hundredth_row,用来返回第100行数据
    hundredth_item = column.iloc[99]
    return hundredth_item
    hundredth_row = titanic_survival.apply(hundredth_row) #将新定义好的函数apply一下
    print(hundredth_row)

—PassengerId 100
Survived 0
Pclass 2
Name Kantor, Mr. Sinai
Sex male
Age 34
SibSp 1
Parch 0
Ticket 244367
Fare 26
Cabin NaN
Embarked S
dtype: object

  1. 用apply(自定义函数名)来得到每一个属性缺失值的个数。
    def not_null_count(column): #返回所有属性缺失值的个数
    column_null = pd.isnull(column) #返回值是true或flase
    null = column[column_null] #缺失值列表
    return len(null)
    column_null_count = titanic_survival.apply(not_null_count)
    print(column_null_count)

—PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64

  1. 用apply(自定义函数名)来对船舱等级【1,2,3】进行一个改写,改成First Class,Second Class ,Third Class
    def which_class(row):
    pclass = row[‘Pclass’]
    if pd.isnull(pclass):
    return “Unknown”
    elif pclass == 1:
    return “First Class”
    elif pclass == 2:
    return “Second Class”
    elif pclass == 3:
    return “Third Class”
    classes = titanic_survival.apply(which_class, axis=1) #通过传入axis=1参数,我们可以使用DataFrame.apply()方法来遍历行,而不是列。
    print(classes)
    —0 Third Class
    1 First Class
    2 Third Class
    3 First Class
    4 Third Class
    5 Third Class
    6 First Class
    7 Third Class
    8 Third Class

  2. 将年龄离散化,在本实例数据集上的“Age”是一个连续的值,这里以18为界限,将其离散化。
    def is_minor(row):
    if row[“Age”] < 18:
    return True
    else:
    return False

minors = titanic_survival.apply(is_minor, axis=1)
print(minors)

def generate_age_label(row):
age = row[“Age”]
if pd.isnull(age):
return “unknown”
elif age < 18:
return “minor”
else:
return “adult”

age_labels = titanic_survival.apply(generate_age_label, axis=1)
print(age_labels)

  1. 利用上边的自定义函数,使用.pivot_table()函数得到年龄阶段与获救率之间的关系。
    titanic_survival[‘age_labels’] = age_labels #将上一个里边返回的关于age_labels的数据组合成数据的一列,得到年龄阶段与存活率之间的关系
    age_group_survival = titanic_survival.pivot_table(index=“age_labels”, values=“Survived”)
    print(age_group_survival)

—age_labels
adult 0.381032
minor 0.539823
unknown 0.293785
Name: Survived, dtype: float64

内容概要:《2024年印尼税收袖珍指南》由普华永道发布,涵盖了印尼税收体系的关键方面。主要内容包括企业所得税、个人所得税、预提税、国际税收协定、增值税、奢侈品销售税、碳税、关税与消费税、税收优惠、地方税、印花税、税务会计、税务稽查与评估、强制执行征税、税务纠纷与处理等。企业所得税税率一般为22%,特定条件可享受优惠。个人所得税采用超额累进税率,最高达35%。预提税涵盖多种收入类型,如工资、利息、股息等。国际税收协定帮助避免双重征税,提供优惠税率。增值税标准税率为11%,部分商品和服务免征。税收优惠包括免税期、加计扣除等,尤其针对特定行业和地区。地方税种类繁多,如土地与建筑物税、机动车税等。税务稽查与评估确保纳税人合规,税务纠纷可通过异议、申诉、诉讼等方式解决。 适用人群:企业财务人员、税务顾问、跨国公司税务部门、个人纳税人等。 使用场景及目标:①帮助企业理解和遵守印尼税法,优化税务规划;②协助个人纳税人正确申报各类税项;③为税务顾问提供最新税收政策信息,提升专业服务水平;④为跨国公司处理跨境税务问题提供指导。 阅读建议:此指南内容详尽,建议读者根据自身需重点阅读相关章节,结合实际案例深入理解各项规定,并关注最新政策动态,确保税务处理合法合规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值