栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

python科学计算实验3

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python科学计算实验3

1. 创建一个8行5列的DataFrame对象,列名为[‘Num’, ‘Name’,‘C++’, ‘Java’, ‘Python’],分别代表学号,姓名,C++成绩,Java成绩,Python成绩。所有成绩要求分布在[50,100)区间,是随机生成的整数。(以下所述的行号和列号均代表行列索引的默认编号。请使用本章所学的知识按顺序解决这些问题,不要投机取巧!)

(1) 复制第4个学生的全部信息,把它作为新行追加到表尾;

(2) 将(3, 4)、(6, 3)、(5, 2)、(2, 3)、(1, 0)这几个位置上的元素置为NaN;

(3) 输出所有包含缺失值的行;

(4) 删除学号为缺失值的行;

(5) 将成绩列上的所有缺失值用其同列上的前一个和后一个成绩的平均值替换;

(6) 检测是否存在重复行;如果存在,保留最后一行,删除其余行;

(7) 重置行索引;

(8) 在2,3,4列上分别找到大于60的最小值,然后把这些值用55替换(如果某列上有多个最小值,则全部替换);

(9) 输出Java成绩不及格的学生的信息(学号,姓名,Java成绩);

(10) 输出“挂科”学生的全部信息。

(11) 自己人工仔细检查以上每一道小题的操作结果是否正确。如果确认无误,用DataFrame的to_excel方法将数据存储到“Scores.xlsx”文件中,用Excel打开并查看数据是否正确。如果以上都正确,最后输出 :“我做对了!”

import pandas as pd
import numpy as np
import random

data = {'Num': ['1', '2', '3', '4', '5', '6', '7', '8'],
        'Name': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
        'C++': [random.randint(50, 99) for i in range(8)],
        'Java': [random.randint(50, 99) for i in range(8)],
        'Python': [random.randint(50, 99) for i in range(8)]}

df = pd.DataFrame(data)
df.loc[8] = pd.Series(df.iloc[3])
#q1 = df.iloc[3:4, :]
#df = df.append(q1, ignore_index=True, sort=False)

df.loc[3, 'Python'] = np.NaN
df.loc[6, 'Java'] = np.NaN
df.loc[5, 'C++'] = np.NaN
df.loc[2, 'Java'] = np.NaN
df.loc[1, 'Num'] = np.NaN

print(df[df.isnull().any(axis=1)])

df.dropna(subset=['Num'], inplace=True)
t1 = pd.DataFrame.copy(df, deep=True)
t2 = pd.DataFrame.copy(df, deep=True)
col = ['C++', 'Java', 'Python']
for i in col:
    t1[i].fillna(method='ffill', axis=0, inplace=True)
    t2[i].fillna(method='bfill', axis=0, inplace=True)
    df[i] = (t1[i] + t2[i]) / 2

df.drop_duplicates(subset='Num', keep='last', inplace=True)
df.reset_index(drop=True, inplace=True)

f = lambda x: min(x) if min(x) > 60 else 0.1
for i in col:
    df[i].replace(to_replace=f(df[i]), value=55.0, inplace=True)
print(df)

print(df[df['Java'].values < 60].iloc[:, 0:3])
print(df[(df['C++'] < 60) | (df['Java'] < 60) | (df['Python'] < 60)])

df.to_excel(r"D:\A学习\python科学计算\实验\3\data.xlsx", index=False)
print("我做对了!")
import numpy as np
import pandas as pd
scores = np.random.randint(50,100,size=[8,3])
names = ['张三','李四','王五','赵六','周大生','吴琼','郑海燕','钱思思']
nums = np.arange(2020005,2020013)
df_basic = pd.DataFrame({'学号':nums,'姓名':names},dtype='str')
df_grade = pd.DataFrame(scores,columns=['C++','Java','Python'])
df1 = pd.concat([df_basic,df_grade],axis=1)

ser1 =pd.Series(df1.iloc[4],index=df1.columns)
df1 = df1.append(ser1,ignore_index=False)

df1.iloc[3,4] = np.nan
df1.iloc[6,3] = np.nan
df1.iloc[5,2] = np.nan
df1.iloc[2,3] = np.nan
df1.iloc[1,0] = np.nan

print(df1[df1.isnull().any(axis=1)])
df1.dropna(how='any',subset=['学号'],inplace=True)

df1.iloc[:,2:] = (df1.iloc[:,2:].fillna(method='ffill') + df1.iloc[:,2:].fillna(method='bfill'))/2

df1.drop_duplicates(keep='last',inplace=True)

df1.reset_index(drop=True,inplace=True)

a = min(df1[df1['C++'] > 60]['C++'])
b = min(df1[df1['Java'] > 60]['Java'])
c = min(df1[df1['Python'] > 60]['Python'])
df1.replace({'C++':a, 'Java':b, 'Python':c},55,inplace=True)

print(df1.query('Java<60').loc[:,['学号','姓名','Java']])

print(df1[np.any(df1.iloc[:,2:] < 60,axis=1)])

df1.to_excel('Scores.xlsx',index=False)

2. 创建2个行、列大小均不相同的DataFrame对象(要求有部分行索引名和列索引名相同)。

(1) 手工计算按某个列索引(或列索引的组合)内连接、外连接、左连接和右连接的结果;然后通过编程验证计算结果的正确性。(用merge函数验证)

(2) 手工计算在0轴和1轴分别并联和交联的结果;然后通过编程验证计算结果的正确性。(用concat函数验证)

(3) 手工计算按行索引作为连接键左连接的结果;然后通过编程验证计算结果的正确性。(用join函数验证)

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'key1': ['k1', 'k1', 'k2', 'k3'],
                    'key2': ['k1', 'k2', 'k1', 'k2'],
                    'A': ['a1', 'a2', 'a3', 'a4'],
                    'B': ['b1', 'b2', 'b3', 'b4']})

df2 = pd.DataFrame({'key1': ['k1', 'k2', 'k2'],
                    'key2': ['k1', 'k1', 'k1'],
                    'C': ['c1', 'c2', 'c3'], })

print(df1.merge(df2, on=['key1', 'key2']))
"""
  key1 key2   A   B   C
0   k1   k1  a1  b1  c1
1   k2   k1  a3  b3  c2
2   k2   k1  a3  b3  c3
"""
print(df1.merge(df2, how='outer', on=['key1', 'key2']))
"""
  key1 key2   A   B    C
0   k1   k1  a1  b1   c1
1   k1   k2  a2  b2  NaN
2   k2   k1  a3  b3   c2
3   k2   k1  a3  b3   c3
4   k3   k2  a4  b4  NaN
"""
print(df1.merge(df2, how='left', on=['key1', 'key2']))
"""
  key1 key2   A   B    C
0   k1   k1  a1  b1   c1
1   k1   k2  a2  b2  NaN
2   k2   k1  a3  b3   c2
3   k2   k1  a3  b3   c3
4   k3   k2  a4  b4  NaN
"""
print(df1.merge(df2, how='right', on=['key1', 'key2']))
"""
  key1 key2   A   B   C
0   k1   k1  a1  b1  c1
1   k2   k1  a3  b3  c2
2   k2   k1  a3  b3  c3
"""
print(pd.concat([df1, df2], ignore_index=True))
"""
  key1 key2    A    B    C
0   k1   k1   a1   b1  NaN
1   k1   k2   a2   b2  NaN
2   k2   k1   a3   b3  NaN
3   k3   k2   a4   b4  NaN
4   k1   k1  NaN  NaN   c1
5   k2   k1  NaN  NaN   c2
6   k2   k1  NaN  NaN   c3
"""
print(pd.concat([df1, df2], axis=1))
"""    
  key1 key2   A   B key1 key2    C
0   k1   k1  a1  b1   k1   k1   c1
1   k1   k2  a2  b2   k2   k1   c2
2   k2   k1  a3  b3   k2   k1   c3
3   k3   k2  a4  b4  NaN  NaN  NaN
"""
print(pd.concat([df1, df2], axis=0, join='inner', ignore_index=True))
"""   将列取交合并,ABC不重合,所以没有
  key1 key2
0   k1   k1
1   k1   k2
2   k2   k1
3   k3   k2
4   k1   k1
5   k2   k1
6   k2   k1
"""
print(pd.concat([df1, df2], axis=1, join='inner'))
"""   只是将前三行合并
  key1 key2   A   B key1 key2   C
0   k1   k1  a1  b1   k1   k1  c1
1   k1   k2  a2  b2   k2   k1  c2
2   k2   k1  a3  b3   k2   k1  c3
"""
print(df1.join(df2.set_index(['key1','key2']), on=['key1','key2']))#默认left
"""
  key1 key2   A   B    C
0   k1   k1  a1  b1   c1
1   k1   k2  a2  b2  NaN
2   k2   k1  a3  b3   c2
2   k2   k1  a3  b3   c3
3   k3   k2  a4  b4  NaN
"""
print(df1.join(df2,lsuffix='_1', rsuffix='_2'))#默认left
"""
  key1_1 key2_1   A   B key1_2 key2_2    C
0     k1     k1  a1  b1     k1     k1   c1
1     k1     k2  a2  b2     k2     k1   c2
2     k2     k1  a3  b3     k2     k1   c3
3     k3     k2  a4  b4    NaN    NaN  NaN
"""

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号