【问题标题】:Is there a quick way to subset columns in PANDAS?有没有一种快速的方法来对 PANDAS 中的列进行子集化?
【发布时间】:2021-04-12 10:56:19
【问题描述】:

我正在尝试设置一个 PANDAS 项目,我可以使用它来比较和返回 excel 和 csv 文件随时间变化的差异。目前我将 excel/csv 文件加载到 pandas 中并为它们分配一个版本列。我为他们分配了一个“版本”列,因为在我的最后一步中,我希望程序为我创建一个仅包含“新”版本文件中已更改内容的文件,这样我就不必更新整个数据库,只需更新数据改变的点。

old = pd.read_excel(landdata20201122.xlsx')
new = pd.read_excel(landdata20210105.xlsx')
old['version'] = "old"
new['version'] = "new"

我将工作表合并为一张,然后根据原始文件中的所有列删除重复的行。我必须对数据进行子集化,因为如果程序查看我添加的版本列,它不会被视为重复行。声明如下

df2 = df1.drop_duplicates(subset=["UWI", "Current DOI Partners", "Encumbrances", "Lease Expiry Date", "Mineral Leases", "Operator", "Attached Land Rights", "Surface Leases"])
df2.shape

我想知道是否有更快的方法来对数据进行子集化,基本上就是我目前的设置方式,我必须列出每个列的标题。我的一些工作表有 100 多列,所以当我只希望它否定 1 列时,工作量很大。有没有办法可以填充所有列标题并删除我不想看到的那些?或者有没有办法在 drop duplicates 命令中输入我不想比较的列,而不是输入除一个之外的所有列?

如果我可以只列出我不想比较的列,我将能够对我正在处理的更多数据使用相同的脚本,因为我不必每次都编辑 drop_duplicates 语句比较表格。

感谢您的帮助,提前感谢您!

【问题讨论】:

    标签: pandas subset drop-duplicates


    【解决方案1】:

    如果我理解得很好:

    1. 将标题存储在列表中。
    2. 手动删除不需要的名称。
    3. drop_duplicates() 的子集中,放置列表。

    如果您要删除的列多于您要保留的列,请在列表中手动添加所有需要的列。 有了列表,你就不需要每次都写了。

    如何迭代列表:

    list=['first', 'second', 'third']
    for i in list:
        print(i)
    
    # Output: 'first', 'second', 'third'
    

    【讨论】:

    • 谢谢你的提示,这让我更接近了。每次我获得新数据进行比较时,我是否都必须编译和编辑列表?这仍然比全部输入要容易,但是有没有办法从列表中自动否定“版本”列?当我加载文件进行比较时,我仍然需要对列表采取手动额外步骤,而不是让它自动化
    • 再次感谢。为了建立我上面的评论,我创建了一个列表并使用 drop 函数来删除不需要的列名。我不再需要输入任何标题。
    • 对不起,我刚看到这条消息。那么,你的问题解决了吗?
    猜你喜欢
    • 2010-09-28
    • 2011-08-26
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多