只用3行Python代码,获取星期几?

大家好,我是皮皮。

一、前言

前几天在Python最强王者交流群分享了一个只用3行Python代码,获取星期几的问题,这里拿出来给大家分享下,一起学习下。

看到这个代码,我当时的第一反应是,这个人基础学的还是可以的,input用到位了。对于初学者来说,能写成这样,也是不错的了,起码功能确实是实现了,虽然说起来确实有点说不上来的味道,应缺斯汀。

二、解决过程

有一说一,针对这个星期几的问题,群里的小伙伴们也给出了几个方法,一起来看看吧。

【冯诚】解答

这里给出【冯诚】大佬的写法,如下图所示:

【月神】解答

下面这个代码是【月神】提供的,如下所示:

from datetime import datetime

print(f"星期{list('一二三四五六日')[datetime.today().weekday()]}")

【瑜亮老师】解答

下面这个代码是【瑜亮老师】提供的,如下所示:

week_dict = {1: '星期一', 2: '星期二', 3: '星期三', 4: '星期四', 5: '星期五', 6: '星期六', 7: '星期日'}
k = int(input("请输入星期数字(1-7):"))     # 此处省略 try 检测 int 转换
print(week_dict.get(k, "输入错误"))

使用字典的get方法,设置了默认值,用于提示输入的数字不在1-7范围。

如果把字典里面的key都改成字符串型的,连int都省了。代码如下:

week_dict = {'1': '星期一', '2': '星期二', '3': '星期三', '4': '星期四', '5': '星期五', '6': '星期六', '7': '星期日'}
k = input("请输入星期数字(1-7):") 
print(week_dict.get(k, "输入错误"))

完美配合!

三、总结

大家好,我是皮皮。这篇文章主要分享了只用3行Python代码,获取星期几的问题,文章中给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。

最后感谢【瑜亮老师】、【月神】、【冯诚】给出的具体解析和代码演示,感谢【Jun】、【磐奚鸟】、【黑脸怪】、【皮皮】、【dcpeng】等人参与学习交流。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值

大家好,我是皮皮。

一、前言

前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。

二、解决过程

这个看上去倒是不太难,但是实现的时候,总是一看就会,一用就废。这里给出【瑜亮老师】的三个解法,一起来看看吧!

方法一:使用自定义函数

代码如下:

import pandas as pd

lv = [1, 2, 2, 3, 3, 4, 2, 3, 3, 3, 3]
num = [122, 111, 222, 444, 555, 555, 333, 666, 666, 777, 888]
df = pd.DataFrame({'lv': lv, 'num': num})

def demean(arr):
    return arr - arr.mean()
# 按照"lv"列进行分组并计算出"num"列每个分组的平均值,然后"num"列内的每个元素减去分组平均值
df["juncha"] = df.groupby("lv")["num"].transform(demean)
print(df

# transform 也支持 lambda 函数,效果是一样的,更简洁一些
# df["juncha"] = df.groupby("lv")["num"].transform(lambda x: x - x.mean())
# print(df)

方法二:使用内置函数

代码如下:

import pandas as pd

lv = [1, 2, 2, 3, 3, 4, 2, 3, 3, 3, 3]
num = [122, 111, 222, 444, 555, 555, 333, 666, 666, 777, 888]
df = pd.DataFrame({'lv': lv, 'num': num})


gp_mean = df.groupby('lv')["num"].mean().rename("gp_mean").reset_index()
df2 = df.merge(gp_mean)
df2["juncha"] = df2["num"] - df2["gp_mean"]
print(df2)

方法三:使用 transform

transform能返回完整数据,输出的形状和输入一致(输入是num列,输出也是一列),代码如下:

import pandas as pd

lv = [1, 2, 2, 3, 3, 4, 2, 3, 3, 3, 3]
num = [122, 111, 222, 444, 555, 555, 333, 666, 666, 777, 888]
df = pd.DataFrame({'lv': lv, 'num': num})


# 方法三: 使用 transform。
df["gp_mean"] = df.groupby('lv')["num"].transform('mean')
df["juncha"] = df["num"] - df["gp_mean"]
print(df)
# 直接输出结果,省略分组平均值列
df["juncha"] = df["num"] - df.groupby('lv')["num"].transform('mean')
print(df)

这样问题就完美地解决啦!

后面他还想用类的方式写,不过看上去没有那么简单。

三、总结

大家好,我是皮皮。这篇文章主要分享了Pandas处理相关知识,基于粉丝提出的按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值的问题,给出了3个行之有效的方法,帮助粉丝顺利解决了问题。

最后感谢粉丝【在下不才】提问,感谢【德善堂小儿推拿-瑜亮老师】给出的具体解析和代码演示,感谢【月神】提供的思路,感谢【dcpeng】等人参与学习交流。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

Python面向对象中的类变量,实例变量怎么来理解?

大家好,我是皮皮。

一、前言

前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个类变量和实例变量的问题,这里拿出来给大家分享下,一起学习下。

二、解决过程

在Python Tutorial中对于类变量和实例变量是这样描述的:

Generally speaking, instance variables are for data unique to each instance and class variables are for attributes and methods shared by all instances of the class.

通常来说,实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法。

针对下方的代码:

class Calculate:
    A = 20
    B = 20
    def __init__(self,a,b):
        A = a
        B = b
        print(self.A+self.B/2+1)

Calculate(4,10)

这个代码输出的结果是31.0,因为self是指向类本身,所以在init外定义A,B可以用self.A,self.B调用,但在init内设置的A,B只是局部变量。

有了以上的基础打底之后,接下来给这个代码做几个变形,就更加清晰了。

class Calculate:
    A = 20
    B = 20
    def __init__(self,a,b):
        self.A = a
        self.B = b
        print(self.A+self.B/2+1)

Calculate(4,10)

像上方的这个代码输出的结果就是10.0。

下面给出【dcpeng】大佬给出的几个图解:

这么看应该清晰了

再次变形:

最后再给大家分享下self这个参数,参考下图:

三、总结

大家好,我是皮皮。这篇文章主要分享了Python面向对象中的类变量,实例变量的问题,给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。

最后感谢粉丝【Chloe】提问,感谢【孤独】、【dcpeng】、【月神】给出的具体解析和代码演示,感谢【艾希·觉罗】等人参与学习交流。

Python网络爬虫真实的URL看来真不能光凭着XHR找

大家好,我是我是皮皮。

一、前言

前几天在Python最强王者交流群有个叫【Rr】的粉丝问了一个关于Python网络爬虫问题,这里拿出来给大家分享下,一起学习。

乍一看,这个是乱码,后来一想,这个也许不是真实的url,大概率是找错了。因为原网页是下图这样的,人畜无害。

二、解决过程

一开始以为是预览的问题,有时候在浏览器中预览状态确实会有乱码,看得并不完整,于是乎先让其看看response一栏。

事实上,response一栏显示的也是一样的,和预览一模一样,这就很尴尬了。

不过不慌,想到这里,大概率可以确定是url没有找对,得重新去寻找,让粉丝发来url,之后真相大白。这里【德善堂小儿推拿-瑜亮老师】大佬发来贺电,如下图所示:

看来真不能光凭着xhr找,之后根据线索就得到对应的url了。

真实的url在下图:

后来【Rr】顺利解析了自己想要的字段。

看上去虽然有乱码,但是转码之后就一切正常了,完美解决!

三、总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对Python网络爬虫中的url寻找的问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题。下次遇到类似的问题,看来真不能光凭着xhr找,有时候真实的url就藏在其他地方。

最后感谢粉丝【Rr】提问,感谢【德善堂小儿推拿-瑜亮老师】、【dcpeng】、【果冻】、【蓬山已无青鸟】大佬给予的支持和积极参与学习。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

盘点Pandas中csv文件读取的方法所带参数usecols知识

大家好,我是皮皮。

一、前言

前几天在Python最强王者群有个叫【老松鼠】的粉丝问了一个关于Pandas中csv文件读取的方法所带参数usecols知识问题,这里拿出来给大家分享下,一起学习。

盘点Pandas中csv文件读取的方法所带参数usecols知识

其实usecols参数是指定列读取。

盘点Pandas中csv文件读取的方法所带参数usecols知识

二、解决过程

下面是【德善堂小儿推拿-瑜亮老师】大佬解答:

盘点Pandas中csv文件读取的方法所带参数usecols知识

举个栗子,就像你手中只有常见的人民币面值,让你把面值等于5元,10元,10000元的拿出来。你是不是只能拿出来5元的和10元的。读取,那不是有啥就拿出来啥,手中没有,当然就不用给了。

后来【月神】给补充了一些知识,不知道你有没有注意到usecols这个参数其实是有返回值的?大部分小伙伴是没有注意到的。

盘点Pandas中csv文件读取的方法所带参数usecols知识

usecols是先从读取到的数据判断出当前的列名并作为返回值,类似于列表,使用函数调用时,例如lambda x:各个元素都会被使用到,类似于map(lambda x: x, iterable), iterable就是usecols的返回值,lambda x与此处一致,再将结果传入至read_csv中,返回指定列的数据框。

对应这个例子中就是lambda c: c in iterable,其实不管iterable是列表还是集合,两者中包含的元素是一样的,那取出来的列都是一样的;而这里面的 c 就是usecols的返回值,可以尝试打印出这个c,就是你要读取的csv文件的所有列的列名

盘点Pandas中csv文件读取的方法所带参数usecols知识

后面有拓展一些关于列表推导式的内容,可以学习下。

盘点Pandas中csv文件读取的方法所带参数usecols知识

还有一个更秀的。

盘点Pandas中csv文件读取的方法所带参数usecols知识

compress()函数帮助列表能够实现布尔索引的函数。

不过话说回来,我一般都是直接全部导入的,一把梭哈。

盘点Pandas中csv文件读取的方法所带参数usecols知识

三、总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对Pandas中csv文件读取的方法所带参数usecols知识,给出了具体说明和演示,顺利地帮助粉丝解决了问题!当然了,在实际工作中,大部分情况还是直接全部导入的。

此外,read_csv有几个比较好的参数,会用的多,一个限制内存,一个分块,这个网上有一大堆的讲解,这里就没有涉猎了。

最后感谢粉丝【老松鼠】提问,感谢【德善堂小儿推拿-瑜亮老师】、【(这是月亮的背面)】和【dcpeng】大佬给出的示例和代码支持,感谢粉丝【Zhang Zhiyu】、【冫马讠成】等人参与学习交流。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

有一个列表,希望字符串中出现这个列表中任何一个元素的话就输出 去掉该元素后的字符串

大家好,我是皮皮。

一、前言

前几天在Python钻石群有个叫【盼头】的粉丝问了一个关于Python列表处理的问题,这里拿出来给大家分享下,一起学习。

有一个列表,希望字符串中出现这个列表中任何一个元素的话就输出 去掉该元素后的字符串。下图是他自己写的部分核心代码。

二、解决过程

他自己想到了一个方法,遍历下列表,之后挨个进行替换,方法肯定是可行的,只是觉得应该有更加好的方法。【月神】从他的代码中看出来了,他这里有两层,一是判断有没有,二是有才输出去除后的,没有不输出也不去除。

这里【dcpeng】提出了也可以用正则,re.sub()方法来操作,正则可以。

这里需要注意下any()函数,命中列表中的任一项都会返回True。

不得不说这个any()函数恰到好处。

三、总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对有一个列表,希望字符串中出现这个列表中任何一个元素的话就输出,去掉该元素后的字符串问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题!

最后感谢粉丝【盼头】提问,感谢【dcpeng】、【月神】大佬给出的思路支持,感谢粉丝【PI】、【德善堂小儿推拿-瑜亮老师】、【进阶学习者】等人积极参与学习交流。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

盘点Pandas中数据删除drop函数的一个细节用法

大家好,我是皮皮。

一、前言

前几天在Python最强王者群有个叫【Chloe】的粉丝问了一个关于Pandas中的drop函数的问题,这里拿出来给大家分享下,一起学习。

二、解决过程

下图是粉丝写的代码。

index是索引的意思,我感觉这块写在一起了,看上去不太好理解,在里边还多了一层筛选。这里给出【月神】佬的解答,一起来看看吧!

直接上图了,如下图所示:

下图是官网关于该函数的解析。

之前我一直用的是columns,确实好像很少看到index,这下清晰了。不过【月神】还是推荐使用反向索引。

三、总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对Pandas中数据删除的问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题!

最后感谢粉丝【Chloe】提问,感谢【(这是月亮的背面)】和【dcpeng】大佬给出的示例和代码支持。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表

大家好,我是皮皮。

一、前言

前几天在Python铂金群有个叫【水方人子】的粉丝问了一个关于excel处理的问题,这里拿出来给大家分享下,一起学习。

能不能把多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表上面,可以吗,就跟数据库左连接一样?

二、解决过程

一开始想到的方法是Excel中的vlookup函数,确实是可以做。

不过在Python群里边,还是尽量用Python来操作一发,这里【Lee】大佬给了几个代码。

代码这里贴出来了,如下所示:

import pandas as pd 

#用append
df = pd.read_excel(r"C:\Users\Administrator\Downloads\test.xlsx", sheet_name=['Sales','Return','Purchase'])
sales = df.get('Sales')
ret = df.get('Return')
purchase = df .get('Purchase')
result = sales.append([ret,purchase], sort=False)
result

之后用merge来操作,代码如下。

左连接的代码如下:

xc = pd.merge(sales,ret, how='left')
xc

右链接的代码如下:

pd.merge(xc,purchase, how='right')

之后用concat连接,代码如下:

# 用concat连接
df_contact = pd.concat(pd.read_excel(r"C:\Users\Administrator\Downloads\test.xlsx", sheet_name=None), ignore_index=True)
df_contact

三、总结

大家好,我是皮皮。这篇文章基于粉丝提问,针对多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表的问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题!

最后感谢粉丝【水方人子】提问,感谢【Lee】大佬给出的示例和代码支持,感谢粉丝【月神】、【铭记yu心】、【杨羊】、【dcpeng】、【LEE】、【冫马讠成】等人参与学习交流。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

大家好,我是皮皮。

一、前言

前几天在Python最强王者交流群【德善堂小儿推拿-瑜亮老师】分享了一个关于Python网络爬虫的问题,这里拿出来给大家分享下,一起学习。

二、解决过程

这里【PI】大佬提出了思路,的确可行。

【皮皮】给了一份代码,取巧,这里就不展示了。后来【月神】给了一份可行的代码,如下所示:

for url in all_url:
    resp = requests.get(url, headers=header, stream=True)
    content_length = resp.headers.get('content-length')
    if content_length and int(content_length) > 10240:
        print(url)

程序运行之后,不到1秒就出来结果了,没想到jupyter里边可以自动显示时间,以前也有看到,但是没有留意,Pycharm里边是没有的,这里来看,jupyter还是蛮香,Pycharm还得自己设置打印时间。

【月神】的方法完全满足题目要求,不过这个文件解析有点慢。

后来【德善堂小儿推拿-瑜亮老师】大佬摊牌了:题目就考这一个知识点:stream=True,别的都是简单的很。这里给出了代码:

import requests
import time

url = ['https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.joypac.dragonhero.cn.mi&channel=meng_4001_2_android',
       'https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.yiwan.longtengtianxia.mi&channel=meng_4001_2_android',
       'https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.netease.mrzh.mi&channel=meng_4001_2_android']
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

start = time.time()
# 方法一:判断response.headers里面的内容
for i in url:
    resp = requests.get(i, headers=header, stream=True)
    if 'Content-Length' in resp.headers:
        print(f'有效url有:\n {i}')
end = time.time()
print(f'测试完毕!共耗时: {end - start:.2f}秒')

# 方法二:判断响应的字节流大小
start2 = time.time()
for i in url:
    resp = requests.get(i, headers=header, stream=True)
    chunk_size = 1024
    for data in resp.iter_content(chunk_size=chunk_size):
        if len(data) > 800:
            print(f'有效url有:\n {i}')
        break
end2 = time.time()
print(f'测试完毕!共耗时: {end2 - start2:.2f}秒')

下面是代码截图:

那小伙伴们就问了,那个stream参数是干啥用的啊?不慌,【月神】丢来一个解析。

如此就清晰多了。

三、总结

大家好,我是皮皮。这篇文章主要分享了在Python网络爬虫过程中,构建网络请求的时候,参数stream=True的使用,使用了一个具体的实例给大家演示了该参数的具体用法!关于该参数的介绍,请参考文中的解析。

最后感谢【德善堂小儿推拿-瑜亮老师】分享,感谢【皮皮】、【PI】、【月神】大佬给出的思路和代码支持,感谢粉丝【冫马讠成】、【孤独】等人参与学习交流。

selenium如何添加代理IP?

大家好,我是皮皮。

一、前言

前几天在Python钻石群有个叫【进击的python】的粉丝问了一个关于Python中selenium如何添加代理IP的问题,这里拿出来给大家分享下,一起学习。

二、解决过程

这里给出【PI】吴老板大佬的解答,一起来看看吧!

直接上图了,如下图所示:

他写这个已经是3年前的时候。

当年还是个实习生呢,现在是吴老板了。

三、总结

大家好,我是Python进阶者。这篇文章基于粉丝提问,针对selenium中怎样添加代理IP的问题,给出了具体说明和演示,顺利地帮助粉丝解决了问题!

最后感谢粉丝【进击的python】提问,感谢【PI】吴老板大佬给出的示例和代码支持。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。