精华内容
下载资源
问答
  • Python几行代码轻松拆分表格作者:梅朵微信公众号:实用办公编程技能微信号:Excel-Python什么?,Python几行代码竟然可以按指定轻松拆分表格?将test.xls中的数据按地区拆分成不同的表格,如:广州.xls…深圳.xls…...

    Python几行代码轻松拆分表格

    作者:梅朵

    微信公众号:实用办公编程技能

    微信号:Excel-Python

    什么?,Python几行代码竟然可以按指定轻松拆分表格?

    将test.xls中的数据按地区拆分成不同的表格,如:

    广州.xls…深圳.xls…西安

    84970d01ca433682e677c88df888bf63.png

    那么如何用Python来实现呢?

    总共7行代码,是不是蠢蠢欲动,你也想试试!

    将test.xls中的数据按地区拆分成不同的表格,主要有4步:

    第一步:导入所需要的库:pandas

    pandas是数据分析处理库,可以读写Excel表格的。

    import pandas as pd

    第二步:读取Excel表格

    使用pandas的read_excel函数进行读取。

    file=pd.read_excel(r'C:UsersAdministratorDesktopfiletest.xls',sheet_name="销售总表")

    第三步:获取地区目录

    使用pandas的iloc获取地区列,使用drop_duplicates函数获取不重复地区目录。

    menu=file.iloc[:,0].drop_duplicates()

    第四步:按地区目录将Excel表格进行拆分

    主要是使用for循环进行拆分。for name in menu: df1=file[file.地区==name]

    path="C:UsersAdministratorDesktopfile"+name+".xls"

    df1.to_excel(path,index=None)

    小伙伴们,是不是很简单!

    以上就是用Python几行代码实现表格按条件拆分的方法,下面给出具体的代码,供大家交流!

    3741b860d674b5ce739429b1f31517a7.png

    关注我们的公众号“实用办公编程技能”(微信号:Excel-Python),让我们的工作和生活变更更轻松!

    http://weixin.qq.com/r/EC7YwPbEh6v4rbKj93sC (二维码自动识别)

    往期文章:

    1.Python制作一个简易计算器2.Python制作二维码生成器3.用Python控制摄像头录制视频4.用Python玩转视频播放5.用Python制作照片阅读器6.用Python实现文本自动播读7.Python制作一个简易时钟8.Python代码实现手写数字识别9.用Python轻松进行图像文本识别10.用Python做小说词频分析图

    扫描关注更多精彩,欢迎留言!

    0853d34e3b4b4ab81a195aa154a5d47d.png
    展开全文
  • (点击上方快速关注并设置为星标,一起学Python)选自towardsdatascience 作者:George Seif, 机器之心编译Python 是一种美丽...Lambda 函数Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。Pyth...

    (点击上方快速关注并设置为星标,一起学Python)

    选自towardsdatascience 作者:George Seif, 机器之心编译

    439e98fc60d05214efe169717a04c4aa.gif

    Python 是一种美丽的语言,它简单易用却非常强大。但你真的会用 Python 的所有功能吗?

    下面是 Python 的 5 种高级特征,以及它们的用法。

    Lambda 函数

    Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。

    Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。

    lambda 函数可以使用任意数量的参数,但表达式只能有一个。

    x = lambda a, b : a * b
    print(x(5, 6)) # prints '30'

    x = lambda a : a*3 + 3
    print(x(3)) # prints '12'

    看它多么简单!我们执行了一些简单的数学运算,而无需定义整个函数。这是 Python 的众多特征之一,这些特征使它成为一种干净、简单的编程语言。

    Map 函数

    Map() 是一种内置的 Python 函数,它可以将函数应用于各种数据结构中的元素,如列表或字典。对于这种运算来说,这是一种非常干净而且可读的执行方式。

    def square_it_func(a):
        return a * a

    x = map(square_it_func, [147])
    print(x) # prints '[1, 16, 47]'

    def multiplier_func(a, b):
        return a * b

    x = map(multiplier_func, [147], [258])
    print(x) # prints '[2, 20, 56]'看看上面的示例!我们可以将函数应用于单个或多个列表。实际上,你可以使用任何 Python 函数作为 map 函数的输入,只要它与你正在操作的序列元素是兼容的。

    Filter 函数

    filter 内置函数与 map 函数非常相似,它也将函数应用于序列结构(列表、元组、字典)。二者的关键区别在于 filter() 将只返回应用函数返回 True 的元素。

    详情请看如下示例:

    # Our numbers
    numbers = [123456789101112131415]

    # Function that filters out all numbers which are odd
    def filter_odd_numbers(num):

        if num % 2 == 0:
            return True
        else:
            return False

    filtered_numbers = filter(filter_odd_numbers, numbers)

    print(filtered_numbers)
    # filtered_numbers = [2, 4, 6, 8, 10, 12, 14]

    我们不仅评估了每个列表元素的 True 或 False,filter() 函数还确保只返回匹配为 True 的元素。非常便于处理检查表达式和构建返回列表这两步。

    Itertools 模块

    Python 的 Itertools 模块是处理迭代器的工具集合。迭代器是一种可以在 for 循环语句(包括列表、元组和字典)中使用的数据类型。

    使用 Itertools 模块中的函数让你可以执行很多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。关于 Itertools 的神奇之处,请看以下示例:

    from itertools import *

    # Easy joining of two lists into a list of tuples
    for i in izip([123], ['a''b''c']):
        print i
    # ('a', 1)
    # ('b', 2)
    # ('c', 3)

    # The count() function returns an interator that 
    # produces consecutive integers, forever. This 
    # one is great for adding indices next to your list 
    # elements for readability and convenience
    for i in izip(count(1), ['Bob''Emily''Joe']):
        print i
    # (1, 'Bob')
    # (2, 'Emily')
    # (3, 'Joe')    

    # The dropwhile() function returns an iterator that returns 
    # all the elements of the input which come after a certain 
    # condition becomes false for the first time. 
    def check_for_drop(x):
        print 'Checking: ', x
        return (x > 5)

    for i in dropwhile(should_drop, [24681012]):
        print 'Result: ', i

    # Checking: 2
    # Checking: 4
    # Result: 6
    # Result: 8
    # Result: 10
    # Result: 12


    # The groupby() function is great for retrieving bunches
    # of iterator elements which are the same or have similar 
    # properties

    a = sorted([1213212345])
    for key, value in groupby(a):
        print(key, value), end=' ')

    # (1, [1, 1, 1])
    # (2, [2, 2, 2]) 
    # (3, [3, 3]) 
    # (4, [4]) 
    # (5, [5]) 

    Generator 函数

    Generator 函数是一个类似迭代器的函数,即它也可以用在 for 循环语句中。这大大简化了你的代码,而且相比简单的 for 循环,它节省了很多内存。

    比如,我们想把 1 到 1000 的所有数字相加,以下代码块的第一部分向你展示了如何使用 for 循环来进行这一计算。

    如果列表很小,比如 1000 行,计算所需的内存还行。但如果列表巨长,比如十亿浮点数,这样做就会出现问题了。使用这种 for 循环,内存中将出现大量列表,但不是每个人都有无限的 RAM 来存储这么多东西的。Python 中的 range() 函数也是这么干的,它在内存中构建列表。

    代码中第二部分展示了使用 Python generator 函数对数字列表求和。generator 函数创建元素,并只在必要时将其存储在内存中,即一次一个。这意味着,如果你要创建十亿浮点数,你只能一次一个地把它们存储在内存中!Python 2.x 中的 xrange() 函数就是使用 generator 来构建列表。

    上述例子说明:如果你想为一个很大的范围生成列表,那么就需要使用 generator 函数。如果你的内存有限,比如使用移动设备或边缘计算,使用这一方法尤其重要。

    也就是说,如果你想对列表进行多次迭代,并且它足够小,可以放进内存,那最好使用 for 循环或 Python 2.x 中的 range 函数。因为 generator 函数和 xrange 函数将会在你每次访问它们时生成新的列表值,而 Python 2.x range 函数是静态的列表,而且整数已经置于内存中,以便快速访问。

    # (1) Using a for loopv
    numbers = list()

    for i in range(1000):
        numbers.append(i+1)

    total = sum(numbers)

    # (2) Using a generator
     def generate_numbers(n):
         num, numbers = 1, []
         while num            numbers.append(num)
         num += 1
         return numbers
     total = sum(generate_numbers(1000))

     # (3) range() vs xrange()
     total = sum(range(1000 + 1))
     total = sum(xrange(1000 + 1))

    原文链接:https://towardsdatascience.com/5-advanced-features-of-python-and-how-to-use-them-73bffa373c84 

    (完)看完本文有收获?请转发分享给更多人关注「Python那些事」,做全栈开发工程师818cb9dee569200e80e5f9b4b6478d2d.png889d63438efa3b7764340cc27697d162.png点「在看」的人都变好看了哦
    展开全文
  • 全文共3360字,预计学习时长9分钟图源:unsplash大多数数据科学在线课程都把Jupyter Notebook作为教学媒介,这是因为初学者在Jupyter Notebook的单元格中编写代码,比编写包含类和函数的脚本更容易。另一个原因在于...

    全文共3360字,预计学习时长9分钟

    517cd50013c5c5cea24a2d49336339b2.png

    图源:unsplash

    大多数数据科学在线课程都把Jupyter Notebook作为教学媒介,这是因为初学者在Jupyter Notebook的单元格中编写代码,比编写包含类和函数的脚本更容易。

    另一个原因在于它使浏览和绘制数据变得容易。键入"Shift + Enter"时,你可以立即看到代码的结果,这使我们能够轻松地确定代码是否有效。

    然而,当处理更多数据科学项目时,Jupyter Notebook也存在几个缺点:

    · 缺乏条理性:随着代码变大,我们所编写的东西越来越难以跟踪。无论使用多少标记将Notebook分隔成不同的部分,断开连接的单元格都使用户难以专注于代码功能。

    · 难以试验:你需要使用不同的数据处理方法进行测试,为机器学习算法选择不同的参数,查看准确性是否提高。但每次试验新方法时,都需要查找和重新运行相关单元格,这耗神耗时,尤其是处理或培训过程需要很长时间才能运行时。

    · 可重复性低:如果你想要使用结构略有不同的新数据,识别其中的错误源很难。

    · 难以调试:当你在代码中收到错误时,无法准确判断出错的原因,是代码还是数据更改?如果是代码出错,具体是哪个部分?

    · 不适合生产:Jupyter Notebook与其他工具配合使用效果不佳。使用其他工具时,从Jupyter Notebook运行代码并不容易。

    a0cb5a9aa94db5dfd6707100059217c1.png

    图源:unsplash

    一定有更好的方法来处理代码,所以我决定尝试一下脚本。为了减少混淆,引用.py文件时,在本文中使用单词"脚本"。

    组织

    Jupyter Notebook中的单元格很难将代码组织成不同的部分。使用脚本可以创建几个小函数,每个函数指定代码的功能。

    bcf82cbe7a67ca25cd32a13f21356b03.png

    更妙的是,如果这些函数可以分类在同类别,如处理数据的函数时,可以将它们放在同一个类中。

    a7dfe04999ebcf45907d60986d27d394.png

    每当我们想要处理数据时,就可以利用类预处理中的函数。

    鼓励实验

    当我们想要尝试对预处理数据的不同方法时,只需添加或删除函数,这样注释不用害怕破坏代码。即使碰巧破坏了代码,也能确切地知道在哪里修复。

    2d6b0fa3ad705f04186ae1608a449fbc.png

    提高重复性

    使用类和函数,可以使代码足够通用,以便能够和其他数据一起使用。例如,如果我们想在新数据中删除不同的列,只需将columns_to_drop更改为列的列表,若是删除,代码也将顺利运行。

    columns_to_drop =config.columns.to_drop             datetime_column =config.columns.datetime.sentiment             dropna_columns =config.columns.drop_na             processor =Preprocess(columns_to_drop,datetime_column, dropna_columns)

    还可以创建一个管道来指定处理和训练数据的步骤。一旦拥有管道,我们所需要做的就是使用它对列车和测试数据应用相同的处理。

    pipline.fit_transform(data)

    易于调试

    使用函数可以更容易地测试该函数是否产生期望的输出,我们可以快速地指出代码中的哪些地方需要更改以生成想要的输出。

    defextract_date_hour_minute(string: str):                                         '''Extract datahour and minute from datetime string'''                                         try:                                             return string[:16]                                         exceptTypeError:                                             return np.nan             deftest_extract_date_hour_minute():                                     '''Test whether the function extractdate, hour, and minute '''                                                string ='2020-07-30T23:25:31.036+03:00'                                     assertextract_date_hour_minute(string) =='2020-07-30T23:25'

    如果所有测试都通过了,但是在运行代码时仍然存在错误,那么我们就知道接下来应该查看这些数据。例如,在通过上面的测试后,在运行脚本时仍然有一个类型错误,这使数据中有空值。那就只需要处理这个问题,就可以平稳运行代码。

    适于生产

    在多个脚本中使用不同的函数:

    from preprocess import preprocess          from model import run_model          from predict import predict             defmain(config):              df =preprocess(config)                 df =run_model(config)                 df, df_scale, min_day, max_day, accuracy =predict(df, config)

    或者添加配置文件来控制变量的值。这可以让我们不必浪费时间去跟踪代码中的特定变量来更改其值。

    columns:          to_drop:            #- keywords            #- entities            - code            - error            - warnings          binary_columns:            - sentiment            - Diff          datetime:            time: Date            sentiment: crawled          drop_na:            - sentiment            - usage            - crawled            - emotion          to_predict: sentiment

    你还可以轻松地添加工具来跟踪实验,比如MLFlow,或者添加工具来处理配置,比如Hydra.cc。

    ca49c944d03527394df4ea158f9fa644.png

    图源:unsplash

    不喜欢Jupyter Notebook,直到迫使自己做出调整

    我以前一直使用Jupyter Notebook。当一些数据科学家建议将Notebook笔记本换成脚本从而避免上述一些问题时,我不理解也不愿意这么做,因为我不喜欢运行单元格时无法看到这种不确定性。

    但是,当我在新公司开始第一个真正的数据科学项目时,Jupyter Notebook的缺点越来越大,所以我决定踏出舒适区,用脚本进行实验。

    起初,我很不习惯,但也注意到了使用脚本的好处。当代码被组织成不同的函数、类和等多个脚本(每个脚本都用于不同的目的,如预处理、培训和测试)时,我开始感到工作更有条理性。

    我在建议读者不要用Jupyter Notebook?

    并不是。如果代码比较小,且不打算将代码投入生产,仍然可以使用Jupyter Notebook。当想要分析、可视化数据时,也可以使用Jupyter Notebook。还可以用它来解释如何使用一些python库。例如,Khuyen Tran主要使用这个存储库中的Jupyter Notebook作为媒介来解释他所有文章中提到的代码。

    如果你不习惯在脚本中编写所有内容,那么你可以将脚本和Jupyter Notebook用于不同的目的。例如,可以在脚本中创建类和函数,然后将它们导入到Notebook中,这样就不那么凌乱了。

    另一种方法是在写完笔记本后把它变成脚本,但组织笔记本中的代码(比如把它们放到函数和类中以及编写测试函数)通常要花费更长的时间。你可以先写一个小的函数,再写一个小的测试函数,可以更快更安全。如果正好想用新的Python库加速代码,可以使用已经编写的测试函数来确保它如期望中那样工作。

    c7114c2acf956c8fe6a37970c9a4c29b.png

    图源:unsplash

    除了本文中提到的方法,一定有更多的方法可以解决Jupyter Notebook的缺点。

    每个人都有自己提高工作利率的方法。刚从Jupyter Notebook切换到脚本可能不太习惯,因为用脚本编写代码不太直观,但你最终会习惯的。你会开始意识到脚本在凌乱的Jupyter Notebook上有着许多好处,并且会希望用脚本编写大部分代码。

    不积跬步无以至千里,从细微处开始改变自己吧。

    5ca5eeb85ebf5625e8cb7f1f0df9af69.png

    留言点赞关注

    我们一起分享AI学习与发展的干货

    如转载,请后台留言,遵守转载规范

    展开全文
  • ↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选来源:python数据分析之禅作者:小dull鸟Oneoldwatch,likebrief python大家好,我是老表~今天和大家分享的内容是关于Python...

    ↑↑↑关注后"星标"简说Python

    人人都可以简单入门Python、爬虫、数据分析 简说Python严选 

    来源:python数据分析之禅   作者:小dull鸟

    One old watch, like brief python大家好,我是老表~和大家分享的内容是关于Python自动化操作excel一些方法和技巧,学习了记得点赞、留言、转发,三连哦~

    431c126ac77d17c7ed93c8b60d76e7f4.png

    公司财务小姐姐每月需要根据如下报表统计出本月、上月、去年同期的销售额、客流量、客单价数据:

    ba3030d8d38f549c97e1a2a4c10e909f.png

    每个月都要手动计算,非常耗费时间,本着乐于助人的原则,我用python写了个小程序,能够实现自动生成财务报表,现把具体过程分享给大家:

    一、pandas导入数据源

    import pandas as pd
    data=pd.read_csv('数据模板.csv',encoding='gbk',parse_dates=["成交时间"])
    data

    c3cb6c0c5a01431d7996118fe051b197.png

    parse_dates可以将成交时间列转换成时间格式

    二、pandas计算相关指标

    先给大家介绍一下指标的计算方式:

    销售额=单价*销量客流量=订单id去重后的次数客单价=销售额/客流量

    1.计算上月数据

    通过pandas比较功能,取出本月数据,&为比较运算符,相当于“与”

    from datetime import datetime
    current_m=data[(data["成交时间"]>=datetime(2020,2,1))&(data["成交时间"]<=datetime(2020,2,28))]
    current_m

    32c2a4645a5dc22d82445596b8dd6722.png

    销售额计算

    current_s=(current_m['销量']*current_m['单价']).sum()
    current_s
    sum是pandas中的求和函数,用于返回用户所请求轴的值之和。

    客流量计算

    current_t=current_m['订单ID'].drop_duplicates().count()
    current_t
    drop_duplicatesop:去重函数count:计数函数

    客单价计算

    curent_s_t=round(current_s/current_t,2)
    curent_s_t

    2.计算上月数据

    计算方式是一样的,只不过把日期范围调整一下,代码如下:

    from datetime import datetime
    last_m=data[(data["成交时间"]>=datetime(2020,1,1))&(data["成交时间"]<=datetime(2020,1,31))]
    last_s=(last_m['销量']*last_m['单价']).sum()
    last_t=last_m['订单ID'].drop_duplicates().count()
    last_s_t=round(last_s/last_t,2)

    3.计算去年同期数据

    from datetime import datetime
    same_m=data[(data["成交时间"]>=datetime(2019,2,1))&(data["成交时间"]<=datetime(2019,2,28))]
    same_s=(same_m['销量']*same_m['单价']).sum()
    same_t=same_m['订单ID'].drop_duplicates().count()
    same_s_t=round(same_s/same_t,2)

    4.将上述数据转成DataFrame表格型数据结构

    result=pd.DataFrame([[current_s,last_s,same_s],[current_t,last_t,same_t],[curent_s_t,last_s_t,same_s_t]],columns=["本月","上月同期","去年同期"],index=["销售额","客流量","客单价"])
    result

    654e05f7263c4c18976116d8c66cd5c9.png

    5.增加同比和环比数据

    result["同比"]=result["本月"]/result["上月同期"]-1
    result["环比"]=result["本月"]/result["去年同期"]-1
    result

    eec6725ecae917793506d903e5e8bd94.png

    自动化报表的模板基本已经做好了,等下月需要时,只需改一下时间,运行程序即可,省去了大量的人工计算时间

    三、可视化展示

    用plotly画出柱状图

    import plotly.graph_objs as go
    columns=["本月","上月同期","去年同期"]
    fig = go.Figure(data=[
        go.Bar(name='销售额',x=columns,y=[current_s,last_s,same_s]),
        go.Bar(name='客流量',x=columns,y=[current_t,last_t,same_t]),
        go.Bar(name='客单价',x=columns,y=[curent_s_t,last_s_t,same_s_t]),])
    fig.update_layout(barmode='group')
    fig.show()

    6d7c575c434f7a3c379a72ea731e7388.png

    点击右上角标签,可以展示不同的参数图形

    简说Python

    c652aee8cb36d79c9ac7957377f2f901.png

    长按扫码关注,一起学Python

    展开全文
  • (2)Python实现 在Python中,要删除某列,用到的是drop()方法,即在drop方法后的括号中指明要删除的列名或者列的位置,即第几列。 在drop方法后的括号中直接传入待删除列的列名,需要加一个参数axis,并让其参数值...
  • pythondrop函数无效的原因 写代码的时候想使用drop函数,但怎么更改都不起作用,本来以为是python版本的原因,仔细看了drop函数用法之后发现 drop系列的所有函数都不改变原有的df中的数据! 也就是说一定不能像...
  • python中用drop函数删除某列或者某行的操作教程import pandas as pdimport numpy as npfrom pandas import dataframefrom pandas import seriesdf1= dataframe({"handsome":["timo","anni","timo"],"smart":["mike",...
  • Python中pandas dataframe删除一行或一列:drop函数

    万次阅读 多人点赞 2018-02-10 20:10:25
    用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=0,指删除index,因此删除columns时要指定axis=1; inplace=False,默认该删除操作不改变原数据,而是返回...
  • python进行数据处理——pandas的drop函数

    万次阅读 多人点赞 2017-10-21 16:39:12
    使用drop函数删除表中的某一行或者某一列,《利用python进行数据分析》
  • 数据源要查询是否存在重复值可以使用duplicated()函数:查询面积是否有相同(重复)值返回的是一组bool值,这些bool值能够用于筛选非重复值或者重复值。需要注意的是duplicated()如果不指定面积这个变量的话,那么其将...
  • 今天小编就为大家分享一篇Python中pandas dataframe删除一行或一列:drop函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 本文出处主要来源于必备工具书《利用python进行数据分析》。 1.清理无效数据 df[df.isnull()] #返回的是个true或false的Series对象(掩码对象),进而筛选出我们需要的特定数据。 df[df.notnull()] df.drop...
  • python 去重函数--drop_dumlicate()

    千次阅读 2019-07-18 11:51:32
    drop_duplicate(subset,keep,inplace) #去重函数 subset:子列名 keep:保留第一列或最后一列,first/last inplace:是否在本数据集修改 示例: df.drop(subset=['item_id','buyer_admin_id'],keep='first') #item_...
  • 但是,在连接所有数据并使用drop_duplicates函数之后,该代码将被控制台接受.但是,当打印到新的excel文件时,副本仍会在一天之内保留.我想念什么吗?是否使drop_duplicates函数无效?我的代码如下:import datetime...
  • 删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。本文出处主要来源于必备工具书《利用python进行数据分析》。1.清理无效数据df[df.is...
  • 从基本的数据清理学起吧讲一下drop函数的用法删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是可选择性的返回另一个dataframe来存放删除后的数据。删除无效项df[...
  • python pandas 之drop()函数

    万次阅读 多人点赞 2019-05-10 10:17:43
    drop函数的使用 (1)drop() 删除行和列 drop([ ],axis=0,inplace=True) drop([]),默认情况下删除某一行; 如果要删除某列,需要axis=1; 参数inplace 默认情况下为False,表示保持原来的数据不变,True 则...
  • 删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。本文出处主要来源于必备工具书《利用python进行数据分析》。1.清理无效数据df[df.is...
  • python中如何删除某列或者某行--用drop函数

    万次阅读 多人点赞 2018-07-24 09:33:28
    drop函数后面用shift+tab可以查看函数的参数明细,如下: 默认参数axis=0,表示对行进行操作,如需对列进行操作需要更改默认参数为axis=1, 默认参数inplace=False,表示该删除操作不改变原数据,而是返回一...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 249
精华内容 99
关键字:

pythondrop函数

python 订阅