Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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 当我将数据框写入excel时,表()会在数据框中放入不需要的列。为什么?_Python_Python 3.x_Pandas_Pivot Table - Fatal编程技术网

Python 当我将数据框写入excel时,表()会在数据框中放入不需要的列。为什么?

Python 当我将数据框写入excel时,表()会在数据框中放入不需要的列。为什么?,python,python-3.x,pandas,pivot-table,Python,Python 3.x,Pandas,Pivot Table,我正在从一张包含几十列的excel表格中创建一个透视表。我从excel工作表中得到第三列,尽管它不在我的代码中 数据如下所示 源IP、目标IP、区域、连接、p/D、评论、位置、时间、备份、数据源 1.1.1.1,2.2.2,数据中心,3,P,装饰,FL,5X5,镜像,云 3.3.3.3,2.2.2.2,办公室,45,D,活动,ME,24X7,RAID,本地 1.1.1.1,4.4.4.4,办公室,33,P,活动,CA,1X3,RAID,云 在Excel中手动创建数据透视表。试图用各种各样的理由来

我正在从一张包含几十列的excel表格中创建一个透视表。我从excel工作表中得到第三列,尽管它不在我的代码中

数据如下所示

源IP、目标IP、区域、连接、p/D、评论、位置、时间、备份、数据源 1.1.1.1,2.2.2,数据中心,3,P,装饰,FL,5X5,镜像,云

3.3.3.3,2.2.2.2,办公室,45,D,活动,ME,24X7,RAID,本地 1.1.1.1,4.4.4.4,办公室,33,P,活动,CA,1X3,RAID,云

在Excel中手动创建数据透视表。试图用各种各样的理由来摆脱它

    fw_files = filedialog.askopenfilename()  #here we grab a filename to parse
    df = pd.read_excel(fw_files)
    df2 = df.drop_duplicates(['Source IP', 'Destination IP'])# lose the duplicates
    df3 = df2[df2['''P/D'''].str.contains('P', na=False)] #only flagged P and don't puke on NAN
    df4 = pd.pivot_table(df3, index=['Source IP', 'Destination IP'])# pivot on my two values
    writer = pd.ExcelWriter(fw_files + '-PIVOT.xlsx', engine='openpyxl')
    df3.to_excel(writer, sheet_name = 'RAW_DATA')
    df4.to_excel(writer, sheet_name = 'SOURCE_TO_DESTINATION')
    writer.save()
预期结果 源IP目标IP 10.120.160.71 172.1.12.5 172.1.1.5

实际结果。我不知道为什么会出现“连接”列,但从excel工作表来看它是正确的

源IP目标IP连接 10.120.160.71 172.1.12.83
172.34.4.545

如果您可以添加更多的源数据,使我们获得可能有用的预期结果。我猜你得到的是因为你没有把“连接”列排除在外。默认情况下,Read Excel将提取所有列,如果该列位于数据框中,pivot_表很可能默认为为为您聚合它,因为它是数字

您可以尝试将dataframe定义为只需要的列。这至少应该为你指明正确的方向

df3 = df2.loc[df2['''P/D'''].str.contains('P', na=False), df2.columns.intersection(['Source IP', 'Destination IP'])]
编辑其他输出想法 我不太清楚为什么只使用索引进行数据透视,因为通常情况下,数据透视将用于聚合。我认为您应该能够分组,因为您似乎不需要聚合。如果您希望输出看起来像那样,您可以设置索引和导出。输出看起来有点愚蠢,但它会以您上面指定的格式在源值之间留下间隙

df:
          Source Destination
0  10.120.160.71  172.1.12.5
1  10.120.160.71   172.1.1.5
2  10.120.160.72  172.1.12.6
3  10.120.160.72   172.1.1.6

df = df.set_index(['Source','Destination'])

df.to_excel('df.xlsx')

          Source Destination
0  10.120.160.71  172.1.12.5
1                 172.1.1.5
2  10.120.160.72  172.1.12.6
3                 172.1.1.6

如果您可以添加更多的源数据,使我们获得预期的结果,这可能会有所帮助。我猜你得到的是因为你没有把“连接”列排除在外。默认情况下,Read Excel将提取所有列,如果该列位于数据框中,pivot_表很可能默认为为为您聚合它,因为它是数字

您可以尝试将dataframe定义为只需要的列。这至少应该为你指明正确的方向

df3 = df2.loc[df2['''P/D'''].str.contains('P', na=False), df2.columns.intersection(['Source IP', 'Destination IP'])]
编辑其他输出想法 我不太清楚为什么只使用索引进行数据透视,因为通常情况下,数据透视将用于聚合。我认为您应该能够分组,因为您似乎不需要聚合。如果您希望输出看起来像那样,您可以设置索引和导出。输出看起来有点愚蠢,但它会以您上面指定的格式在源值之间留下间隙

df:
          Source Destination
0  10.120.160.71  172.1.12.5
1  10.120.160.71   172.1.1.5
2  10.120.160.72  172.1.12.6
3  10.120.160.72   172.1.1.6

df = df.set_index(['Source','Destination'])

df.to_excel('df.xlsx')

          Source Destination
0  10.120.160.71  172.1.12.5
1                 172.1.1.5
2  10.120.160.72  172.1.12.6
3                 172.1.1.6

这很难看,但我这样做就解决了

df4=df4.drop([“连接”],轴=1)


然后写出来(从第2行开始算起)

很难看,但我这样做解决了这个问题

df4=df4.drop([“连接”],轴=1)


然后写操作开始了(从第2行开始)

是的,似乎我需要一个数字列。它会找到第一个包含所有源IP值的源IP,并使用Pivot报告它。您的解抛出一个错误,明确告诉我没有要聚合的数字列。所以你让我走上了正确的道路。我已经添加了相同的数据来演示这个问题。是的,似乎我需要一个数字列。它会找到第一个包含所有源IP值的源IP,并使用Pivot报告它。您的解抛出一个错误,明确告诉我没有要聚合的数字列。所以你让我走上了正确的道路。我已经添加了相同的数据来说明这个问题。