我可能做的事非常愚蠢,但我很难过.
我有一个数据框,我想替换特定列中超过零值的值.我原以为这是实现这个目标的一种方式:
df[df.my_channel > 20000].my_channel = 0
Run Code Online (Sandbox Code Playgroud)
如果我将频道复制到新的数据框中,那很简单:
df2 = df.my_channel
df2[df2 > 20000] = 0
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,但似乎不能将频道作为原始数据帧的一部分.
我当前的代码如下所示 - 我正在导入一个MAT文件,并尝试从其中的变量创建一个DataFrame:
mat = loadmat(file_path) # load mat-file
Variables = mat.keys() # identify variable names
df = pd.DataFrame # Initialise DataFrame
for name in Variables:
B = mat[name]
s = pd.Series (B[:,1])
Run Code Online (Sandbox Code Playgroud)
所以在循环中我可以创建一系列的每个变量(它们是带有两列的数组 - 所以我需要的值在第2列)
我的问题是如何将系列追加到数据帧?我查看了文档,但没有一个例子符合我的要求.
最好的祝福,
本
我使用以下语句创建了我的数据的各个组:
df = pd.read_csv(file_path)
grouped = df.groupby(df.some_parameter)
Run Code Online (Sandbox Code Playgroud)
我想做什么(在伪代码中):
for name, group in grouped:
'Some Text' + name = group
write to csv
Run Code Online (Sandbox Code Playgroud)
最终结果是原始数据集的每个块的单独的.csv文件.
我想创建一个简单的 TKinter 文件选择对话框,其中包含一个我将从其他脚本而不是更广泛的 GUI 中使用的功能。
我目前的代码是:
# Select a single file and return the full path as a string
def select_file(data_dir):
chdir(data_dir)
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
return file_path
Run Code Online (Sandbox Code Playgroud)
当我运行它时,文件对话框总是在其他窗口后面。如果我将 Spyder 最大化,它会在它后面打开,所以我必须最小化。
有一些与此相关的问题,但我一直无法使任何建议的代码工作,因此如果这被视为重复问题,我们深表歉意。
本
我正在使用scipy.interpolate.interp2d为表面创建插值函数.然后,我有两个真实数据数组,我想计算插值点.如果我将两个数组传递给interp2d函数,我得到一个包含所有点的数组,而不仅仅是几对点.
我的解决方案是将两个数组压缩成一个坐标对列表,并将其传递给循环中的插值函数:
f_interp = interpolate.interp2d(X_table, Y_table,Z_table, kind='cubic')
co_ords = zip(X,Y)
out = []
for i in range(len(co_ords)):
X = co_ords[i][0]
Y = co_ords[i][1]
value = f_interp(X,Y)
out.append(float(value))
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有更好的(更优雅的,Pythonic?)方式来实现相同的结果?
我正在使用PyQT4开发一个GUI对话框,它将一些数据导入到Pandas DataFrame中,然后将数据绘制到嵌入式Matplotlib画布中.
我想将一个变量列表从DataFrame传递给组合框.我的第一次尝试是:
list = list(df.parameter,unique())
self.FirstComboBox = QtGui.QComboBox()
self.FirstComboBox.addItems(list)
Run Code Online (Sandbox Code Playgroud)
但是在运行这个我得到
TypeError: QComboBox.addItems(QStringList): argument 1 has unexpected type 'list'
Run Code Online (Sandbox Code Playgroud)
我已经看到了将dict键的排序列表传递给组合框的示例,所以我很困惑,我无法传递列表.
本
我正在尝试在 PyQt 应用程序中使用 PyQtGraph 创建绘图布局。
我需要一行有两个图,前两列宽,第二个单列宽。
阅读文档我认为这样的事情会起作用:
# Create the PyQtGraph Plot area
self.view = pg.GraphicsLayoutWidget()
self.w1 = self.view.addPlot(row=1, col=1, colspan=2, title = 'Data1')
self.w2 = self.view.addPlot(row=1, col=3, colspan=1, title = 'Data2')
Run Code Online (Sandbox Code Playgroud)
但在本例中,我得到两个绘图区域,每个区域占窗口宽度的 50%。
我究竟做错了什么?
此致,
本
我正在为 Pandas Dataframe 编写一个自定义访问器类 - 我遵循此处的示例并取得了积极的结果。但是我有一个函数想传递额外的参数。
我在我的访问器类中创建了这个函数:
@property
def accessor_function(self, time_window=0.5):
def group_function(df, time):
fl = df.loc[df.Type_num==0]
id = fl.Time.idxmin()
threshold = df.loc[id, 'column'] + time
return fl.loc[fl.Time<threshold]
self.Subset = self._obj.groupby(by['col_1','col_2']).apply(group_function, time_window)
self.Subset.reset_index(drop=True, inplace=True)
return self.Subset
Run Code Online (Sandbox Code Playgroud)
如果我这样称呼它,它可以使用time_window=0.5:
df.accessor.accessor_function
Run Code Online (Sandbox Code Playgroud)
但是,如果我想为关键字参数传递不同的值:
df.accessor.accessor_function(time_window = 1)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
TypeError: 'DataFrame' object is not callable
Run Code Online (Sandbox Code Playgroud)
我找不到任何解释传递args或kwargs自定义访问器的明显文档。所以我不确定我正在尝试的是否可能。但了解如何前进会很好。
本
我认为这应该有效:
cm = matplotlib.colors.LinearSegmentedColormap.from_list('phases', ['g', 'y', 'c', 'm', 'b', 'r']
plt.register_cmap('phases', cm)
Run Code Online (Sandbox Code Playgroud)
但是当我输入:
plt.cmap.phases
Run Code Online (Sandbox Code Playgroud)
我收到属性错误。很明显我的 cmap 没有像我想象的那样被注册。但尚不清楚原因。
本
我已经开发了一个脚本中的函数。我运行了该脚本以将该函数放置在我的名称空间中。我能正常工作的代码行是:
df.my_variable.replace([inf, -inf, nan, NaN], 0, inplace=True)
Run Code Online (Sandbox Code Playgroud)
我现在将此功能移到mymodule.py。然后,我尝试运行它:
import mymodule as mm
mm.myfun()
Run Code Online (Sandbox Code Playgroud)
现在,要替换的代码行inf等将引发以下错误:
global name 'inf' is not defined
Run Code Online (Sandbox Code Playgroud)
我确定这是在IPython中进行交互式开发的遗产,但是我对如何定义inf才能进行这项工作感到困惑。
我有一个使用以下导入列表的python脚本:
import matplotlib
matplotlib.style.use('ggplot')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
然后它将文本文件导入到数据框中,在df中创建一些额外的列并创建两个图.
我需要能够从Matlab调用它(由于一些繁琐的原因......)我通过在Matlab提示符下键入以下内容来完成此操作:
dos('myfile.py')
Run Code Online (Sandbox Code Playgroud)
其中引发了以下错误:
Traceback (most recent call last):
File "D:\Documents\Python Scripts\XXXXXXXXX.py", line 8, in <module>
matplotlib.style.use('ggplot')
AttributeError: 'module' object has no attribute 'style'
Run Code Online (Sandbox Code Playgroud)
但是,如果我评论要求ggplot样式的行,它运行正常并在标准matplotlib格式中正确生成图.
有关为什么会出现这种情况的任何建议?
最好的祝福,
本
我一直在尝试在 Seaborn 中使用 pointplot,总的来说它可以满足我的需求,而且我对它的功能印象深刻。
我的用例是相当标准的:
sns.pointplot(x="Category_1", y="Parameter", hue="Category 2", data=df);
Run Code Online (Sandbox Code Playgroud)
我的问题是我用于色调的类别包含以下形式的字符串:
"1 string1", "2 string2", "3 string3", etc....
Run Code Online (Sandbox Code Playgroud)
这是设计使然,以便我可以在排序时获得特定顺序。但是,当我运行 Seaborn 函数时,顺序是不同的。
Seaborn 是按照什么逻辑进行排序的,有没有办法强制执行所需的顺序。如果我做:
A = df.Category2.unique()
A.sort()
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的列表顺序。
本