Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据框中删除列以仅显示所需的列_Python_Pandas - Fatal编程技术网

Python 从数据框中删除列以仅显示所需的列

Python 从数据框中删除列以仅显示所需的列,python,pandas,Python,Pandas,基本上我想删除一些我不需要的列。我有点困惑为什么这不起作用 import os import pandas def summarise(indir, outfile): os.chdir(indir) filelist = ".txt" dflist = [] colnames = ["DSP Code", "Report Date", "Initial Date", "End Date", "Transaction Type", "Sale Type", "Dist

基本上我想删除一些我不需要的列。我有点困惑为什么这不起作用

import os
import pandas


def summarise(indir, outfile):
os.chdir(indir)
filelist = ".txt"
dflist = []
colnames = ["DSP Code", "Report Date", "Initial Date", "End Date", "Transaction Type", "Sale Type",
            "Distribution Channel", "Products Origin ID", "Product ID", "Artist", "Title", "Units Sold",
            "Retail Price", "Dealer Price", "Additional Revenue", "Warner Share", "Entity to be billed",
            "E retailer name", "E retailer Country", "End Consumer Country", "Price Code", "Currency Code"]
for filename in filelist:
    print(filename)
    df = pandas.read_csv('SYB_M_20171001_20171031.txt', header=None, encoding='utf-8', sep='\t', names=colnames,
                         skiprows=3)
    df['data_revenue'] = df['Units Sold'] * df['Dealer Price']  # Multiplying Units with Dealer price = Revenue
    df = df.sort_values(['End Consumer Country', 'Currency Code'])  # Sorts the columns alphabetically
    df.to_csv(outfile + r"\output.csv", index=None)
    dflist.append(filename)
    df.drop(columns='DSP Code')


summarise(r"O:\James Upson\Sound Track Your Brand Testing\SYB Test",
      r"O:\James Upson\Sound Track Your Brand Testing\SYB Test Formatted") 
我想删除您在
colnames
中看到的所有列标题,不包括
中的“售出单位”、“经销商价格”、“最终消费者国家”、“货币代码”
。我尝试使用
df.drop(columns='DSP code')
删除一列,但这似乎不起作用

任何帮助都将不胜感激:)

此位不工作,因为您没有将其分配给新的df

df = df.drop(columns='DSP Code')
您还可以通过将所关心的列复制到第二个数据帧来保留它们。

根据,除非您在原地执行该操作,否则它将返回一个数据帧

返回:
删除:pandas.DataFrame

就地:bool,默认为False

如果为True,则就地执行操作并返回None

可以就地执行:
df.drop(columns=['DSP code'],inplace=True)
或存储返回的数据帧:
df=df.drop(columns=['DSP code'])
您可以像这样执行:

df.drop(['Col_1', 'col_2'], axis=1, inplace=True)
或:

正如注释部分所建议的那样,使用
usecols
,它提供了一种过滤器,将列部分缩减为只使用需要休息的列,而不使用进程,因此效率将提高,资源消耗也将减少:

df = pandas.read_csv('SYB_M_20171001_20171031.txt', encoding='utf-8', sep='\t', usecols=["col1", "col2", "col3"],skiprows=3)
只要做:

df = df['Units Sold', 'Dealer Price', 'End Consumer Country', 'Currency Code']

保留所需的数据,而不是删除其他数据。

您需要保存输出或设置
inplace=True
df。drop
不会更改原始数据帧。尝试分配一个不同的变量名。示例:
df1=df.drop(columns='DSP code')
由于您似乎想要
drop
大多数列,因此在csv中读取时应该指定
usecols
,这样您就不需要读入它们,然后在不使用它们的情况下将它们删除。尝试添加
usecols=[“售出单位”、“经销商价格”、“最终消费者国家”、“货币代码”]
作为
的一个参数。请阅读_csv
。不过,我对
名称的排序并不十分熟悉。另外,您的
输出文件不会包含所有列,因此可能不完全是您需要的。已解决!!!谢谢@ALollz,并感谢所有其他人的贡献和反馈:)不,这仍然是您需要的oesn不起作用:(当我运行脚本时,列仍然在那里,两个都没有成功,列仍然在那里,可能是因为您在删除之前写入csv?
drop
,然后
到csv
df = pandas.read_csv('SYB_M_20171001_20171031.txt', encoding='utf-8', sep='\t', usecols=["col1", "col2", "col3"],skiprows=3)
df = df['Units Sold', 'Dealer Price', 'End Consumer Country', 'Currency Code']