我有一个大熊猫数据框。它有数千列和超过一百万行。我想逐行计算最大值和最小值之间的差异。请记住,有许多NaN值,有些行都是NaN值(但我仍然希望保留它们!)。
我写了以下代码。它有效,但耗费时间:
totTime = []
for index, row in date.iterrows():
myRow = row.dropna()
if len(myRow):
tt = max(myRow) - min(myRow)
else:
tt = None
totTime.append(tt)
有没有办法优化它?我尝试使用以下代码,但遇到所有NaN行时出现错误:
tt = lambda x: max(x.dropna()) - min(x.dropna())
totTime = date.apply(tt, axis=1)
任何建议都将不胜感激!
答案 0 :(得分:2)
使用if (!Directory.Exists(_logPath))
{
Directory.CreateDirectory(_logPath);
}
string logFile = Path.Combine(_logPath, "myApp.Log");
using (StreamWriter file = new StreamWriter(logFile, true))
{
file.WriteLine(lines);
file.Close();
};
python
循环来迭代大for
或pandas.DataFrame
通常是个坏主意。您应该优先使用它们中的可用内置函数,因为它们已经过优化,并且在许多情况下实际上不是用python编写的,而是使用编译语言编写的。在您的情况下,您应该使用方法pandas.DataFrame.max和pandas.DataFrame.min,这两种方法都会为您提供numpy.ndarray
选项,以跳过skipna
中的nan
值,而无需实际手动放下它们。此外,您可以选择DataFrame
来最小化。因此,您可以指定axis
以获得最小的列。
这将与@EdChum在评论中提到的内容类似:
axis=1
答案 1 :(得分:0)
我对迭代有同样的问题。 2分:
df.replace(['inf','nan'],[0,0])
执行此操作。它取代了inf和nan值。