VisibleDeprecationWarning:从不规则的嵌套序列创建一个 ndarray
Posted
技术标签:
【中文标题】VisibleDeprecationWarning:从不规则的嵌套序列创建一个 ndarray【英文标题】:VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences 【发布时间】:2021-05-10 20:11:53 【问题描述】:我正在尝试剪辑数据集,但出现以下错误:
警告(来自警告模块): 文件“C:\Users\Desktop\py_magn\SnippingMap.py”,第 66 行 res = np.array((x, y, clipMag)).T VisibleDeprecationWarning:不推荐从不规则的嵌套序列(它是具有不同长度或形状的列表或元组或 ndarray 的列表或元组)创建 ndarray。如果您打算这样做,则必须在创建 ndarray 时指定 'dtype=object'
数据集是该区域的磁测量和尺寸 x,y,以 km 为单位。使用此代码,我尝试将区域裁剪为 90x90。 代码是:
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 400, height = 400, bg = 'gray1', relief = 'raised')
canvas1.pack()
def getCSV ():
global df
import_file_path = filedialog.askopenfilename()
df = np.genfromtxt(import_file_path, delimiter='_', missing_values = ' ', filling_values = None)
print (df)
browseButton_CSV = tk.Button(text=" Import CSV File to clip ", command=getCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(200, 200, window=browseButton_CSV)
root.mainloop()
x, y, mag = df[:,0], df[:,1], df[:,3]
xmin, ymin = np.min(x), np.min(y)
xc, yc = (xmin + (90/2)), (ymin + (90/2)) # 90 einai to mege8os toy para8yrou
print(xmin,xc)
def clipping( x, y, mag, xc, yc):
xmini, ymini = xc - 45, yc - 45
xmaxi, ymaxi = xc + 45, xc + 45
print(xmaxi, xc)
count=0
for i in x:
if i>=xmini and i<=xmaxi:
count += 1
clipMag = mag[:count]
xn, yn = np.unique(x), np.unique(y)
ind = np.where(xn == xmini)
ind=ind[0][0]
xn = np.linspace(xmini, xmaxi, int(mt.sqrt(len(clipMag))))
yn = np.linspace(ymini, ymaxi, int(mt.sqrt(len(clipMag))))
print(xn, np.shape(xn))
xn, yn = np.meshgrid(xn, yn)
x, y = np.reshape(xn, (1,np.shape(xn)[0]*np.shape(xn)[1])), np.reshape(yn, (1,np.shape(yn)[0]*np.shape(yn)[1]))
res = np.array((x, y, clipMag)).T
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'gray1', relief = 'raised')
canvas1.pack()
def saveCSV ():
global df
export_file_path = filedialog.asksaveasfilename( defaultextension=".csv", filetypes=[("CSV files", '*.csv')])
np.savetxt(export_file_path, res, delimiter='_')
browseButton_CSV = tk.Button(text=" Export filled CSV Data File ", command=saveCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 150, window=browseButton_CSV)
root.mainloop()
while True:
if (xc+45)>=np.max(x):
if (yc+45)>=np.max(y):
clipping(x, y, mag, xc, yc)
break
else:
xc = xmin + (90/2)
yc = yc + 45
else:
clipping(x, y, mag, xc, yc)
xc = xc + 45
数据在 .csv 中
【问题讨论】:
这是一个警告,而不是错误。您可以按照警告消息 (dtype=object
) 中的说明进行操作以防止它发生。
警告这3个数组(x, y, clipMag)
的形状不同,结果数组将是object dtype和1d。您使用 .T
遵循这一事实表明您期望结果为 2d(或更高)。在savetxt
中使用该数组也意味着它应该是二维数字。您需要查看这 3 个数组输入的形状。那里出了点问题。
@hpaulj 我计算错了形状,现在形状没问题,但我继续收到相同的警告,而且我无法将它们导出到 csv
@Stef 设置 dtype=object,当我尝试导出时出现以下错误:
回溯(最近一次调用最后一次):文件“C:\Python\Python38\lib\tkinter_init_.py”,第 1883 行,在 call return self.func(*args) File "C:\Users\Stefanos\Desktop\py_magn\SnippingMap.py", line 77, in saveCSV np.savetxt(export_file_path, res, delimiter='') File “<__array_function_> internals>”,第 5 行,在 savetxt 文件“C:\Programs\Python\Python38\lib\site-packages\numpy\lib\npyio.py”,第 1426 行,在 savetxt 中引发 TypeError( "数组 dtype ('%s') 和 "TypeError 不匹配:数组 dtype ('object') 和格式说明符 ('%.18e') 之间不匹配
【参考方案1】:
所以我更改了代码,特别是 clipping() 函数。我用熊猫 :
def clipping( x, y, z, mag, xc, yc):
df1 = pd.DataFrame('X':x, 'Y':y, 'Z':z, 'MAG':mag)
df1['geometry'] = list(zip(df1['X'], df1['Y'], df1['Z']))
df1['geometry'] = df1['geometry'].apply(Point)
gdfMAGN = gpd.GeoDataFrame(df1, geometry='geometry')
x1, y1 = xc, yc
# ____________[90000m X 90000m] IS THE WINDOW DIMENSIONS______________
clipAr = Polygon([ (x1, y1), (x1, y1+90000), (x1 + 90000, y1 + 90000), (x1+90000, y1)])
pol = gpd.GeoDataFrame([1], geometry=[clipAr] )
res = gpd.clip(gdfMAGN, pol)
resCSV = np.array([res['X'],res['Y'],res['Z'],res['MAG']]).T
#---------------------START---SAVE---------------------
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'gray1', relief = 'raised')
canvas1.pack()
def saveCSV ():
global df
export_file_path = filedialog.asksaveasfilename( defaultextension=".csv", filetypes=[("CSV files", '*.csv')])
np.savetxt(export_file_path, resCSV, delimiter='_')
browseButton_CSV = tk.Button(text=" Export filled CSV Data File ", command=saveCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 150, window=browseButton_CSV)
root.mainloop()
#------------------------END---SAVE--------------------
【讨论】:
以上是关于VisibleDeprecationWarning:从不规则的嵌套序列创建一个 ndarray的主要内容,如果未能解决你的问题,请参考以下文章