我是 Python 新手。我得到了一个脚本,它生成随机数并将它们放入 126x81 稀疏矩阵中。我想生成一个 csv 文件:Cell_ID;细胞_X;细胞_Y;瓦尔。单元格 X 和 Y 当然是每个单元格的坐标。我的脚本有一个循环,它生成一个“outputs.csv”文件,但其中的数据没有按照我想要的方式显示(每行的开头/结尾有方括号,并且有省略号 [... ] 代替某些值)。总而言之,我无法阅读矩阵的全部内容。
如果可以的话,我会上传一张图片,向您展示我希望这些数据在记事本或 Excel 中读取时的样子,但我不被允许这样做。然而,这些数据应该看起来像一个典型的 csv 文件,每个值都在其列下对齐。谢谢你们的帮助!:)
我有matplotlib库生成的矩阵图.我的矩阵的大小是256x256,我已经有一个图例和一个带有正确刻度的颜色条.由于我是stackoverflow的新手,我无法附加任何图像.无论如何,我使用此代码生成图:
# Plotting - Showing interpolation of randomization
plt.imshow(M[-257:,-257:].T, origin='lower',interpolation='nearest',cmap='Blues', norm=mc.Normalize(vmin=0,vmax=M.max()))
title_string=('fBm: Inverse FFT on Spectral Synthesis')
subtitle_string=('Lattice size: 256x256 | H=0.8 | dim(f)=1.2 | Ref: Saupe, 1988 | Event: 50 mm/h, 15 min')
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=9)
plt.show()
# Makes a custom list of tick mark intervals for color bar (assumes minimum is always zero)
numberOfTicks = 5
ticksListIncrement = M.max()/(numberOfTicks)
ticksList = []
for i in range((numberOfTicks+1)):
ticksList.append(ticksListIncrement * i)
cb=plt.colorbar(orientation='horizontal', format='%0.2f', ticks=ticksList)
cb.set_label('Water depth [m]')
plt.show() …Run Code Online (Sandbox Code Playgroud) 此答案说明了如何在Pandas中将整数转换为每小时的时间步长。我需要做相反的事情。
我的数据框df1:
A
0 02:00:00
1 01:00:00
2 02:00:00
3 03:00:00
Run Code Online (Sandbox Code Playgroud)
我的预期数据框df1:
A B
0 02:00:00 2
1 01:00:00 1
2 02:00:00 2
3 03:00:00 3
Run Code Online (Sandbox Code Playgroud)
我正在尝试:
df1['B'] = df1['A'].astype(int)
Run Code Online (Sandbox Code Playgroud)
之所以失败,是因为:
TypeError: cannot astype a timedelta from [timedelta64[ns]] to [int32]
做这个的最好方式是什么?
编辑
如果我尝试df['B'] = df['A'].dt.hour,那么我得到:
AttributeError: 'TimedeltaProperties' object has no attribute 'hour'
我有一个带有两个数据集的图,它产生一个轻微的梯度,其中最佳拟合的曲线可能是过度绘制的.
目前我只是设法得到最合适的直线.我理解scipy.optimize.curve_fit应该能够帮助我,但这需要我知道我想要过度绘制的功能(我认为).
以下是我的代码和图表.如何为这些数据集创建曲线图?
plt.figure(figsize=(15,6.6))
pl.subplot(1,2,1)
plt.plot(gg,AA, 'kx')
plt.xlabel('x')
plt.ylabel('y')
plt.gca().invert_yaxis()
y=AA
x=gg
fit=pl.polyfit(x,y,1)
#slope, fit_fn=pl.poly1d(fit)
fit_fn=pl.poly1d(fit)
scat=pl.plot(x,y, 'kx', x,fit_fn(x), '-b' )
pl.subplot(1,2,2)
pl.plot(LL,pp, 'kx')#shows points with no removal or bestfit
plt.gca().invert_yaxis()
plt.savefig('1.jpg')
plt.show()
Run Code Online (Sandbox Code Playgroud)

应该注意的是,可能没有曲线,但我想发现是否有适合的曲线.
我有五个列表,我打算在两个单独的子图中绘制.在子图1中我想要列表1,2,3和4; 在子图2中我想要列表4和5.这些是列表和event_index用于设置x label.
event_index=['event 1','event 2','event 3','event 4','event 5','event 6','event 7','event 8','event 9','event 10']
list1 = [0.7,0.8,0.8,0.9,0.8,0.7,0.6,0.9,1.0,0.9]
list2 = [0.2,0.3,0.1,0.0,0.2,0.1,0.3,0.1,0.2,0.1]
list3 = [0.4,0.6,0.4,0.5,0.4,0.5,0.6,0.4,0.5,0.4]
list4 = [78,87,77,65,89,98,74,94,85,73]
list5 = [16,44,14,55,34,36,76,54,43,32]
Run Code Online (Sandbox Code Playgroud)
为了生成两个子图,我使用以下代码:
fig = plt.figure() #Creates a new figure
ax1 = fig.add_subplot(211) #First subplot: list 1,2,3, and 4
ax2 = ax1.twinx() #Creates a twin y-axis for plotting the values of list 4
line1 = ax1.plot(list1,'bo-',label='list1') #Plotting list1
line2 = ax1.plot(list2,'go-',label='list2') #Plotting list2
line3 = ax1.plot(list3,'ro-',label='list3') #Plotting list3
line4 …Run Code Online (Sandbox Code Playgroud) 此处已触及该主题,但未提供有关如何创建3D图并将图像以(x,y)指定z高度插入平面的指示。
因此,为了提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图mplot3d:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.winter,
linewidth=0, antialiased=True)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
在级别上z=min(z)-1,这里-1是避免重叠的视觉偏移, …
假设您有这样的字典,但不一定按其值排序:
d={a:2,k:2,c:11,f:17,e:84,y:86}
并且您希望将值从最大到最小排序:
order=sorted(d.values(),reverse=True)
这会给你:
order=[86,84,17,11,2,2]
现在,我们来看看最后两个元素:
b=order[-2:]=[2,2]
什么是检索d值b对应的键的Pythonic方法?在这种情况下,预期结果将是:
ans=[a,k]
说我有这个数据框df:
A B C
0 1 1 2
1 2 2 2
2 1 3 1
3 4 5 2
Run Code Online (Sandbox Code Playgroud)
说你要选择所有的行哪列C是>1。如果我这样做:
newdf=df['C']>1
Run Code Online (Sandbox Code Playgroud)
我只获得True或False在结果df中。相反,在给出的示例中,我想要这个结果:
A B C
0 1 1 2
1 2 2 2
3 4 5 2
Run Code Online (Sandbox Code Playgroud)
你会怎么办?你建议使用iloc吗?
我有以下数据帧df:
id lat lon year month day
0 381 53.30660 -0.54649 2004 1 2
1 381 53.30660 -0.54649 2004 1 3
2 381 53.30660 -0.54649 2004 1 4
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列df['Date'],其中year,根据格式组合month,和day列yyyy-m-d.
在这篇文章后,我做了:
`df['Date']=pd.to_datetime(df['year']*10000000000
+df['month']*100000000
+df['day']*1000000,
format='%Y-%m-%d%')`
Run Code Online (Sandbox Code Playgroud)
结果不是我所期望的,因为它从1970年开始而不是2004年,它还包含小时标记,我没有指定:
id lat lon year month day Date
0 381 53.30660 -0.54649 2004 1 2 1970-01-01 05:34:00.102
1 381 53.30660 -0.54649 2004 1 3 1970-01-01 05:34:00.103
2 381 53.30660 -0.54649 2004 1 …Run Code Online (Sandbox Code Playgroud) 给定以下数据框df:
df = pd.DataFrame({'A':['Tony', 'Mike', 'Jen', 'Anna'], 'B': ['no', 'yes', 'no', 'yes']})
A B
0 Tony no
1 Mike yes
2 Jen no
3 Anna yes
Run Code Online (Sandbox Code Playgroud)
我想添加另一列,该列逐渐对元素进行计数df['B']='yes':
A B C
0 Tony no 0
1 Mike yes 1
2 Jen no 0
3 Anna yes 2
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?