小编FaC*_*fee的帖子

熊猫:将数据框切割成同一电子表格的多个工作表

假设我有3个相同长度的词典,我将它组合成一个独特的pandas数据帧.然后我将所述数据帧转储到Excel文件中.例:

import pandas as pd
from itertools import izip_longest

d1={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
d2={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
d3={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}

dict_list=[d1,d2,d3]

stats_matrix=[ tuple('dict{}'.format(i+1) for i in range(len(dict_list))) ] + list( izip_longest(*([ v for k,v in sorted(d.items())] for d in dict_list)) )
stats_matrix.pop(0)

mydf=pd.DataFrame(stats_matrix,index=None)

mydf.columns = ['d1','d2','d3']

writer = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter')
mydf.to_excel(writer, sheet_name='sole')   
writer.save()  
Run Code Online (Sandbox Code Playgroud)

此代码生成具有唯一工作表的Excel文件:

>Sheet1<

d1   d2   d3 
1    1    1
2    2    2
3    3    3
4    4    4
5    5    5
6    6    6
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何以这样的方式对这个数据帧进行切片:生成的Excel文件有3张,其中标题重复,每张表中有两行值?

编辑

在这里给出的例子中,dicts每个都有6个元素.在我的实际案例中,他们有25000,数据帧的索引从1.所以我想将这个数据帧切割成25个不同的子切片,每个子切片都被转储到同一主文件的专用Excel表中. …

python excel slice dataframe pandas

5
推荐指数
1
解决办法
891
查看次数

如何在2D numpy数组中找到值的特定"区域"?

我正在使用numpy101x101=10201值组成的2D 数组.这样的值的float类型和范围从0.01.0.数组有一个X,Y坐标系,它起源于左上角:因此,位置(0,0)在左上角,而位置(101,101)在右下角.

这就是2D数组的样子(只是一个摘录):

X,Y,Value
0,0,0.482
0,1,0.49
0,2,0.496
0,3,0.495
0,4,0.49
0,5,0.489
0,6,0.5
0,7,0.504
0,8,0.494
0,9,0.485
Run Code Online (Sandbox Code Playgroud)

我希望能够:

1)计算超过给定阈值的单元区域数(见下图),比如说0.3;

2)确定这些区域的视觉中心与具有坐标的左上角之间的距离(0,0).

怎么能在Python 2.7中完成?

这是一个2D数组的直观表示,突出显示了2个区域(颜色越深,值越高):

在此输入图像描述

python arrays numpy image-processing scipy

4
推荐指数
1
解决办法
3017
查看次数

NetworkX:邻接矩阵与图形不对应

假设我有两个选项来生成网络的邻接矩阵:nx.adjacency_matrix()以及我自己的代码.我想测试我的代码的正确性,并提出了一些奇怪的不等式.

示例:3x3网格网络.

import networkx as nx
N=3
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i,j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.relabel_nodes(G,labels,False)
inds=labels.keys()
vals=labels.values()
inds.sort()
vals.sort()
pos2=dict(zip(vals,inds))
plt.figure()
nx.draw_networkx(G, pos=pos2, with_labels=True, node_size = 200)
Run Code Online (Sandbox Code Playgroud)

这是可视化: 在此输入图像描述

邻接矩阵nx.adjacency_matrix():

B=nx.adjacency_matrix(G)
B1=B.todense()

[[0 0 0 0 0 1 0 0 1]
 [0 0 0 1 0 1 0 0 0]
 [0 0 0 …
Run Code Online (Sandbox Code Playgroud)

python matrix adjacency-list networkx adjacency-matrix

4
推荐指数
1
解决办法
4079
查看次数

如何以正确的列对齐方式将字典转储到.xlsx文件中?

我有一本包含2000个项目的字典,如下所示:

d = {'10071353': (0, 0), '06030011': (6, 0), '06030016': (2, 10), ...}
Run Code Online (Sandbox Code Playgroud)

鉴于我想将其写入.xlsx文件,因此使用以下代码(从此处获取):

import xlsxwriter
workbook = xlsxwriter.Workbook('myfile.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0
order=sorted(d.keys())
for key in order:
    row += 1
    worksheet.write(row, col,     key)
    for item in d[key]:
        worksheet.write(row, col + 1, item)
        row += 1

workbook.close()
Run Code Online (Sandbox Code Playgroud)

这将产生.xlsx具有以下对齐方式的文件:

d = {'10071353': (0, 0), '06030011': (6, 0), '06030016': (2, 10), ...}
Run Code Online (Sandbox Code Playgroud)

但是,这是我追求的目标:

import xlsxwriter
workbook = xlsxwriter.Workbook('myfile.xlsx')
worksheet = workbook.add_worksheet() …
Run Code Online (Sandbox Code Playgroud)

python excel dictionary xlsxwriter

4
推荐指数
2
解决办法
3695
查看次数

NetworkX:如何为现有G.edges()添加权重?

给定在NetworkX中创建的任何图形G,我希望能够在创建图形为G.edges()分配一些权重。涉及的图形是网格,erdos-reyni,barabasi-albert等。

鉴于我G.edges()

[(0, 1), (0, 10), (1, 11), (1, 2), (2, 3), (2, 12), ...]
Run Code Online (Sandbox Code Playgroud)

而我的weights

{(0,1):1.0, (0,10):1.0, (1,2):1.0, (1,11):1.0, (2,3):1.0, (2,12):1.0, ...}
Run Code Online (Sandbox Code Playgroud)

如何为每个边缘分配相关权重?在这种情况下,所有权重均为1。

我试图像这样直接将权重添加到G.edges()

for i, edge in enumerate(G.edges()):
    G.edges[i]['weight']=weights[edge]
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-6119dc6b7af0> in <module>()
     10 
     11 for i, edge in enumerate(G.edges()):
---> 12     G.edges[i]['weight']=weights[edge]

TypeError: 'instancemethod' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

怎么了?既然G.edges()是列表,为什么不能像其他列表一样访问其元素?

python algorithm graph edges networkx

4
推荐指数
2
解决办法
5740
查看次数

Python:在列表字典中使用Counter

给出这样的列表字典: d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}

我希望能够计算每个值在所有列表中出现的次数.在给出的示例中,预期结果将是:

occurrences={0.1:4, 0.2:1, 1.1:1, 1.2:1, 2.1:1, 2.2:1}

我想Counter在这样的行中使用:

occurrences = Counter([k[0] for k in d.values()])

但输出是Counter({0.1: 1, 1.1: 1, 2.1: 1}),意味着前一行只计算每个列表的第一个元素的出现次数.

如何将此计数扩展到所有列表的所有元素?

python counter dictionary list

4
推荐指数
1
解决办法
550
查看次数

熊猫:为不同的子图设置不同的ylim和标题

说我有这个数据框:

    Type       Cat1       Cat2       Cat3
0   A      0.384000   0.393000   0.458000
1   B      0.603337   0.381470   0.299773
2   C      0.585797   0.452570   0.317607
3   D      0.324715   0.765212   0.717755
Run Code Online (Sandbox Code Playgroud)

我这样绘制(从这里开始):

axes = df.set_index('Type').plot.bar(subplots=True, legend=False)
plt.subplots_adjust(hspace=0.35)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的问题:如何ylim为每个子图设置不同的值?以及如何修改Cat标题的字体大小?

python matplotlib pandas subplot

4
推荐指数
1
解决办法
782
查看次数

Pandas:将特定函数应用于列并创建其他列

我有一个df带有地理坐标的熊猫数据框,如下所示:

    lat         lon         
0   48.01025772 -6.15690851 
1   48.02164841 -6.10588741 
2   48.03302765 -6.05480051 
... ...         ...
Run Code Online (Sandbox Code Playgroud)

我需要将这些坐标转换为不同的系统,并为此提供专用功能。我打算创建两个新列,df['N']这与配对lat,并且df['E']这是搭配lon

函数的外观无关紧要,因此为简单起见,我们将其称为f。该函数的操作如下:E, N = f(float(lat), float(lon))

有没有办法遍历 的所有行df,提取lat,lon对,(计算它们的转换)并将值分配给相关列?

python loops dataframe pandas

4
推荐指数
1
解决办法
6712
查看次数

Matplotlib:创建两个子图,每个子图对应两个y轴

这个matplotlib教程展示了如何使用两个y轴(两个不同的比例)创建一个图:

import numpy as np
import matplotlib.pyplot as plt


def two_scales(ax1, time, data1, data2, c1, c2):

    ax2 = ax1.twinx()

    ax1.plot(time, data1, color=c1)
    ax1.set_xlabel('time (s)')
    ax1.set_ylabel('exp')

    ax2.plot(time, data2, color=c2)
    ax2.set_ylabel('sin')
    return ax1, ax2


# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
s2 = np.sin(2 * np.pi * t)

# Create axes
fig, ax = plt.subplots()
ax1, ax2 = two_scales(ax, t, s1, s2, 'r', 'b')


# Change color of each axis
def color_y_axis(ax, color):
    """Color your …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

4
推荐指数
1
解决办法
3205
查看次数

熊猫:从下面的行开始读取具有特定值的Excel文件

说我有以下Excel文件:

    A      B     C
0   -      -     -
1   Start  -     -
2   3      2     4
3   7      8     4
4   11     2     17
Run Code Online (Sandbox Code Playgroud)

我想读取数据框中的文件,以确保我开始在该值所在的行下方读取它Start

注意:该Start值并不总是位于同一行中,因此如果我要使用:

import pandas as pd
xls = pd.ExcelFile('C:\Users\MyFolder\MyFile.xlsx')
df = xls.parse('Sheet1', skiprows=4, index_col=None)
Run Code Online (Sandbox Code Playgroud)

这将因skiprows需要修复而失败。是否有任何变通办法来确保xls.parse找到字符串值而不是行号?

python excel pandas

4
推荐指数
2
解决办法
7595
查看次数