假设我有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表中. …
我正在使用numpy由101x101=10201值组成的2D 数组.这样的值的float类型和范围从0.0到1.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个区域(颜色越深,值越高):
假设我有两个选项来生成网络的邻接矩阵: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) 我有一本包含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) 给定在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()是列表,为什么不能像其他列表一样访问其元素?
给出这样的列表字典:
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}),意味着前一行只计算每个列表的第一个元素的出现次数.
如何将此计数扩展到所有列表的所有元素?
说我有这个数据框:
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标题的字体大小?
我有一个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对,(计算它们的转换)并将值分配给相关列?
这个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) 说我有以下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找到字符串值而不是行号?