GVKun编程网logo

熊猫、numpy.where() 和 numpy.nan(熊猫python)

1

本文将为您提供关于熊猫、numpy.where()和numpy.nan的详细介绍,我们还将为您解释熊猫python的相关知识,同时,我们还将为您提供关于"CALayerpositioncontains

本文将为您提供关于熊猫、numpy.where() 和 numpy.nan的详细介绍,我们还将为您解释熊猫python的相关知识,同时,我们还将为您提供关于"CALayer position contains NaN: [nan nan]" 自定义滑块导致的错误信息、angularjs – Kendo网格分页未正确初始化(NaN – NaN)、JavaScript Puzzlers! 解惑(一):为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?、Pandas Dataframe'[在轴中找不到[nan nan nan ... nan nan nan]'的实用信息。

本文目录一览:

熊猫、numpy.where() 和 numpy.nan(熊猫python)

熊猫、numpy.where() 和 numpy.nan(熊猫python)

如何解决熊猫、numpy.where() 和 numpy.nan

我想使用 numpy.where() 向 pandas.DataFrame 添加一列。我想对条件为假的行使用 NaN 值(以指示这些值“缺失”)。

考虑:

>>> import numpy; import pandas
>>> df = pandas.DataFrame({''A'':[1,2,3,4]}); print(df)
   A
0  1
1  2
2  3
3  4
>>> df[''B''] = numpy.nan
>>> df[''C''] = numpy.where(df[''A''] < 3,''yes'',numpy.nan)
>>> print(df)
   A   B    C
0  1 NaN  yes
1  2 NaN  yes
2  3 NaN  nan
3  4 NaN  nan
>>> df.isna()
       A     B      C
0  False  True  False
1  False  True  False
2  False  True  False
3  False  True  False

为什么B显示“NaN”而C显示“nan”?为什么 DataFrame.isna() 无法检测到 C 中的 NaN 值?

我应该在 where 中使用 numpy.nan 以外的其他东西吗? Nonepandas.NA 似乎都可以工作并且可以被 DataFrame.isna() 检测到,但我不确定这些是最佳选择。

谢谢!

编辑:根据@Tim Roberts 和@DYZ,numpy.where 返回一个字符串类型的数组,因此在 numpy.NaN 上调用 str 构造函数。 C列中的值实际上是字符串“nan”。然而,问题仍然存在:这里最优雅的事情是什么?我应该使用None吗?还是别的什么?

解决方法

np.where 将第二个和第三个参数强制为相同的数据类型。由于第二个参数是一个字符串,第三个参数也通过调用函数 str():

转换为一个字符串
str(numpy.nan)
# ''nan''

结果,C列中的值都是字符串。

您可以先用 None 填充 NaN 行,然后用 np.nan 将它们转换为 fillna()

df[''C''] = numpy.where(df[''A''] < 3,''yes'',None)
df[''C''].fillna(np.nan,inplace=True)
,

B 是纯数字列。 C 混合了字符串和数字,因此该列的类型为“object”,并且打印方式不同。

"CALayer position contains NaN: [nan nan]" 自定义滑块导致的错误信息

如何解决"CALayer position contains NaN: [nan nan]" 自定义滑块导致的错误信息

我有一个视频播放器开始播放视频(来自 firebase URL),在某些情况下(70% 的情况)我在物理设备上运行时收到此错误消息(异常)(但在模拟器中启动时没有问题) : “CALayer 位置包含 NaN:[nan nan]”

我发现当我评论“VideoPlayerControlsView()”时没有出现错误,所以我很确定问题是我的 CustomerSlider 对象位于这个 VideoPlayerControlsView 视图的内部。

我认为这可能是由加载远程视频引起的,因为视频没有加载,应用程序不知道 AVPlayer 对象的大小/边界,因此无法创建一些父视图(可能是 CustomerSlider)。 .

构建一个最小的可重现示例将是一场噩梦,我只是希望有些人能在我的代码/逻辑中发现错误..如果没有 - 当然会构建它。别无选择。

struct DetailedplayerView : View {
    // The progress through the video,as a percentage (from 0 to 1)
    @State private var videoPos: Double = 0
    // The duration of the video in seconds
    @State private var videoDuration: Double = 0
    // Whether we''re currently interacting with the seek bar or doing a seek
    @State private var seeking = false

    private var player: AVPlayer = AVPlayer()
        
    init(item: ExerciseItem,hVideoURL: URL?) {

        if hVideoURL != nil {
            player = AVPlayer(url: hVideoURL!)
            player.isMuted = true
            player.play()
        } else {
            print("[debug] hVideoURL is nil")
        }
    }

    var body: some View {
        ZStack {
            //vstack {
            VideoPlayerView(videoPos: $videoPos,videoDuration: $videoDuration,seeking: $seeking,//timeline: $timeline,//videoTimeline: videoTimeline,player: player)
                .frame(width: UIScreen.screenHeight,height: UIScreen.screenWidth)
                
            vstack {
                
                Spacer()
                VideoPlayerControlsView(videoPos: $videoPos,**<<-----------------------**
                                        videoDuration: $videoDuration,player: player)
                    .frame(width: UIScreen.screenHeight - 2*Constants.scrollPadding,height: 20)
                    .padding(.bottom,20)
            }
                
        }
        .ondisappear {
            // When this View isn''t being shown anymore stop the player
            self.player.replaceCurrentItem(with: nil)
        }
    }
}

struct VideoPlayerControlsView : View {
    @Binding private(set) var videoPos: Double
    @Binding private(set) var videoDuration: Double
    @Binding private(set) var seeking: Bool
//    @Binding private(set) var timeline: [Advice]

    @State var shouldStopPlayer: Bool = false
    
    @State var player: AVPlayer
    //let player: AVPlayer
    
    @State private var playerPaused = false
    
    var body: some View {
        HStack {
            // Play/pause button
            Button(action: togglePlayPause) {
                Image(systemName: playerPaused ? "arrowtriangle.right.fill" : "pause.fill")
                    .foregroundColor(Color.mainSubtitleColor)
                    .contentShape(Rectangle())

                    .padding(.trailing,10)
            }
            
            // Current video time
            if videoPos.isFinite && videoPos.isCanonical && videoDuration.isFinite && videoDuration.isCanonical {
            Text(Utility.formatSecondsToHMS(videoPos * videoDuration))
                .foregroundColor(Color.mainSubtitleColor)
            }
            
            // Slider for seeking / showing video progress
            CustomSlider(value: $videoPos,shouldStopPlayer: self.$shouldStopPlayer,range: (0,1),knobWidth: 4) { modifiers in
              ZStack {
                Group {

                    Color(#colorLiteral(red: 1,green: 1,blue: 1,alpha: 0.5799999833106995))//Color((red: 0.4,green: 0.3,blue: 1)
                        .opacity(0.4)
                        .frame(height: 4)
                        .modifier(modifiers.barRight)

                    Color.mainSubtitleColor//Color(red: 0.4,blue: 1)
                        .frame(height: 4)
                        .modifier(modifiers.barLeft)

                }
                .cornerRadius(5)

                vstack {
                    Image(systemName: "arrowtriangle.down.fill") // SF Symbol
                    .foregroundColor(Color.mainSubtitleColor)
                    .offset(y: -3)
                }
                .frame(width: 20,height: 20)
                .contentShape(Rectangle())
                .modifier(modifiers.knob)
              }
            }
            .onChange(of: shouldStopPlayer) { _ in
                if shouldStopPlayer == false {
                    print("[debug] shouldStopPlayer == false")
                    sliderEditingChanged(editingStarted: false)
                } else {
                    if seeking == false {
                        print("[debug] shouldStopPlayer == true")
                        sliderEditingChanged(editingStarted: true)
                    }
                }
            }
            .frame(height: 20)

            // Video duration
            if videoDuration.isCanonical && videoDuration.isFinite {
            Text(Utility.formatSecondsToHMS(videoDuration))
                .foregroundColor(Color.mainSubtitleColor)
            }
        }
        .padding(.leading,40)
        .padding(.trailing,40)
    }
    
    private func togglePlayPause() {
        pausePlayer(!playerPaused)
    }
    
    private func pausePlayer(_ pause: Bool) {
        playerPaused = pause
        
        if playerPaused {
            player.pause()
        }
        else {
           player.play()
        }
    }
    
    private func sliderEditingChanged(editingStarted: Bool) {
        if editingStarted {
            // Set a flag stating that we''re seeking so the slider doesn''t
            // get updated by the periodic time observer on the player
            seeking = true
            pausePlayer(true)
        }
        
        // Do the seek if we''re finished
        if !editingStarted {
            let targetTime = CMTime(seconds: videoPos * videoDuration,preferredTimescale: 600)
            player.seek(to: targetTime) { _ in
                // Now the seek is finished,resume normal operation
                self.seeking = false
                self.pausePlayer(false)
            }
        }
    }
}

extension Double {
    func convert(fromrange: (Double,Double),toRange: (Double,Double)) -> Double {
        // Example: if self = 1,fromrange = (0,2),toRange = (10,12) -> solution = 11
        var value = self
        value -= fromrange.0
        value /= Double(fromrange.1 - fromrange.0)
        value *= toRange.1 - toRange.0
        value += toRange.0
        return value
    }
}

struct CustomSliderComponents {
    let barLeft: CustomSliderModifier
    let barRight: CustomSliderModifier
    let knob: CustomSliderModifier
}

struct CustomSliderModifier: ViewModifier {
    enum Name {
        case barLeft
        case barRight
        case knob
    }
    let name: Name
    let size: CGSize
    let offset: CGFloat

    func body(content: Content) -> some View {
        content
            .frame(width: (size.width >= 0) ? size.width : 0)
            .position(x: size.width*0.5,y: size.height*0.5)
            .offset(x: offset)
    }
}

struct CustomSlider<Component: View>: View {

    @Binding var value: Double
    var range: (Double,Double)
    var knobWidth: CGFloat?
    let viewbuilder: (CustomSliderComponents) -> Component
    @Binding var shouldStopPlayer: Bool
    
    init(value: Binding<Double>,shouldStopPlayer: Binding<Bool>,range: (Double,knobWidth: CGFloat? = nil,_ viewbuilder: @escaping (CustomSliderComponents) -> Component
    ) {
        _value = value
        _shouldStopPlayer = shouldStopPlayer
        self.range = range
        self.viewbuilder = viewbuilder
        self.knobWidth = knobWidth
    }

    var body: some View {
      return GeometryReader { geometry in
        self.view(geometry: geometry) // function below
      }
    }

    private func view(geometry: GeometryProxy) -> some View {
      let frame = geometry.frame(in: .global)
      let drag = DragGesture(minimumdistance: 0)
        .onChanged { drag in
                    shouldStopPlayer = true
                    self.onDragChange(drag,frame)
        }
        .onEnded { drag in
            shouldStopPlayer = false
            //self.updatedValue = value
            print("[debug] slider drag gesture ended,value = \\(value)")
        }
      let offsetX = self.getoffsetX(frame: frame)

      let knobSize = CGSize(width: knobWidth ?? frame.height,height: frame.height)
      let barLeftSize = CGSize(width: CGFloat(offsetX + knobSize.width * 0.5),height:  frame.height)
      let barRightSize = CGSize(width: frame.width - barLeftSize.width,height: frame.height)

      let modifiers = CustomSliderComponents(
          barLeft: CustomSliderModifier(name: .barLeft,size: barLeftSize,offset: 0),barRight: CustomSliderModifier(name: .barRight,size: barRightSize,offset: barLeftSize.width),knob: CustomSliderModifier(name: .knob,size: knobSize,offset: offsetX))

      return ZStack { viewbuilder(modifiers).gesture(drag) }
    }
    
    private func onDragChange(_ drag: DragGesture.Value,_ frame: CGRect) {
        let width = (knob: Double(knobWidth ?? frame.size.height),view: Double(frame.size.width))
        let xrange = (min: Double(0),max: Double(width.view - width.knob))
        var value = Double(drag.startLocation.x + drag.translation.width) // knob center x
        value -= 0.5*width.knob // offset from center to leading edge of knob
        value = value > xrange.max ? xrange.max : value // limit to leading edge
        value = value < xrange.min ? xrange.min : value // limit to trailing edge
        value = value.convert(fromrange: (xrange.min,xrange.max),toRange: range)
        //print("[debug] slider drag gesture detected,value = \\(value)")
        self.value = value
    }
    
    private func getoffsetX(frame: CGRect) -> CGFloat {
        let width = (knob: knobWidth ?? frame.size.height,view: frame.size.width)
        let xrange: (Double,Double) = (0,Double(width.view - width.knob))

        let result = self.value.convert(fromrange: range,toRange: xrange)
        return CGFloat(result)
    }
  
}

一些额外的代码展示了如何触发DetailedplayerView:

struct DetailedVideo: View {
    var item: ExerciseItem
    var url: URL
    @Binding var isPaused: Bool
    
    var body: some View {
        ZStack {
            
            DetailedplayerView(item: self.item,hVideoURL: url)
                //.frame(width: 500,height: 500) //@@UPDATED: Apr 10 
            
            HStack {
                
                vstack {
                    
                    ZStack {
                        //Rectangle 126
                        RoundedRectangle(cornerRadius: 1)
                            .fill(Color(#colorLiteral(red: 0.3063802123069763,green: 0.3063802123069763,blue: 0.3063802123069763,alpha: 1)))
                            .frame(width: 2,height: 20.3)
                            .rotationEffect(.degrees(-135))
                        
                        //Rectangle 125
                        RoundedRectangle(cornerRadius: 1)
                            .fill(Color(#colorLiteral(red: 0.3063802123069763,height: 20.3)
                            .rotationEffect(.degrees(-45))
                        
                    }
                    .frame(width: 35,height: 35)//14.4
                    .contentShape(Rectangle())
                    .onTapGesture {
                        print("[debugUI] isPaused = false")
                        self.isPaused = false
                    }
                    .offset(x:20,y:20)
                    
                    Spacer()
                }
                
                Spacer()
                
            }
        }
        .ignoresSafeArea(.all)
    }
}

@viewbuilder
    var detailedVideoView: some View {
        if self.hVideoURL != nil {
            DetailedVideo(item: self.exerciseVM.exerciseItems[self.exerciseVM.currentIndex],url: self.hVideoURL!,isPaused: self.$exerciseVM.isPaused) // when is paused - we are playing detailed video?
                .frame(width: UIScreen.screenHeight,height: UIScreen.screenWidth) //UPDATED: Apr 9,2021
                .onAppear {
                    AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
                    UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue,forKey: "orientation")
                    UINavigationController.attemptRotationToDeviceOrientation()
                }
                .ondisappear {
                    dispatchQueue.main.async {
                        AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
                        UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue,forKey: "orientation")
                        UINavigationController.attemptRotationToDeviceOrientation()
                    }
                }
        } else {
            EmptyView()
        }
    }

angularjs – Kendo网格分页未正确初始化(NaN – NaN)

angularjs – Kendo网格分页未正确初始化(NaN – NaN)

这是运行的例子
http://dojo.telerik.com/exok/12

它基本上是带有Angular的Kendo网格. Datasource as ObservableArray(这比DataSource更好).
问题是当前页面未设置,页脚显示3个项目的NaN – NaN.

我该如何解决?

谢谢

解决方法

您必须为网格设置页面大小

数据源:        {          数据:$scope.people,          pageSize:10        },

JavaScript Puzzlers! 解惑(一):为什么 [

JavaScript Puzzlers! 解惑(一):为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?

JavaScript Puzzlers! 被称为 javascript 界的专业八级测验,感兴趣的 jser 可以去试试。
我试了一下, 36 道题只做对了 19 道, 算下来正确率为 53%,还没有及格。

第一题为 ["1", "2", "3"].map(parseInt) 的返回值。

> ["1", "2", "3"].map(parseInt)
[1, NaN, NaN]

在 javascript 中 ["1", "2", "3"].map(parseInt) 为何返回不是 [1,2,3] 却是 [1,NaN,NaN]

我们首先回顾一下 parseInt()map() 两个函数的用法:

parseInt() 函数

定义和用法

parseInt() 函数可解析一个字符串,并返回一个整数。

语法

parseInt(string, radix)
参数 描述
string 必需。要被解析的字符串。
radix

可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 `0`,则数字将以 10 为基础来解析。如果它以 `"0x"` 或 `"0X"` 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 `parseInt()` 将返回 `NaN`。

返回值

返回解析后的数字。

说明

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

举例:

  1. 如果 string"0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。

  2. 如果 string0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。

  3. 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

提示和注释

注释:只有字符串中的第一个数字会被返回。

注释:开头和结尾的空格是允许的。

提示:如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN

实例

在本例中,我们将使用 parseInt() 来解析不同的字符串:

parseInt("10");         // 返回 10 (默认十进制)
parseInt("19",10);      // 返回 19 (十进制: 10+9)
parseInt("11",2);       // 返回 3 (二进制: 2+1)
parseInt("17",8);       // 返回 15 (八进制: 8+7)
parseInt("1f",16);      // 返回 31 (十六进制: 16+15)
parseInt("010");        // 未定:返回 10 或 8

map 方法

对数组的每个元素调用定义的回调函数并返回包含结果的数组。

array1.map(callbackfn[, thisArg])
参数 定义
array1 必需。一个数组对象。
callbackfn 必需。一个接受**最多**三个参数的函数。对于数组中的每个元素,`map` 方法都会调用 `callbackfn` 函数一次。
thisArg 可选。可在 `callbackfn` 函数中为其引用 `this` 关键字的对象。如果省略 `thisArg`,则 `undefined` 将用作 `this` 值。

返回值

其中的每个元素均为关联的原始数组元素的回调函数返回值的新数组。

异常

如果 callbackfn 参数不是函数对象,则将引发 TypeError 异常。

备注

对于数组中的每个元素,map 方法都会调用 callbackfn 函数一次(采用升序索引顺序)。 不为数组中缺少的元素调用该回调函数。

除了数组对象之外,map 方法可由具有 length 属性且具有已按数字编制索引的属性名的任何对象使用。

回调函数语法

回调函数的语法如下所示:

function callbackfn(value, index, array1)

可使用最多三个参数来声明回调函数。

下表列出了回调函数参数。

回调参数 定义
value 数组元素的值。
index 数组元素的数字索引。
array1 包含该元素的数组对象。

修改数组对象

数组对象可由回调函数修改。

下表描述了在 map 方法启动后修改数组对象所获得的结果。

`map` 方法启动后的条件 元素是否传递给回调函数
在数组的原始长度之外添加元素。 否。
添加元素以填充数组中缺少的元素。 是,如果该索引尚未传递给回调函数。
元素被更改。 是,如果该元素尚未传递给回调函数。
从数组中删除元素。 否,除非该元素已传递给回调函数。

示例

下面的示例阐释了 map 方法的用法。

// 定义回调函数
// 计算圆的面积
function AreaOfCircle(radius) { 
    var area = Math.PI * (radius * radius); 
    return area.toFixed(0); 
} 

// 定义一个数组,保护三个元素
var radii = [10, 20, 30]; 

// 计算 radii 的面积. 
var areas = radii.map(AreaOfCircle); 

document.write(areas); 

// 输出: 
// 314,1257,2827

下面的示例阐释 thisArg 参数的用法,该参数指定对其引用 this 关键字的对象。

// 定义一个对象 object,保护 divisor 属性和 remainder 方法
// remainder 函数求每个传入的值的个位数。(即除以 10 取余数)
var obj = { 
    divisor: 10, 
    remainder: function (value) { 
        return value % this.divisor; 
    } 
} 

// 定义一个包含 4 个元素的数组
var numbers = [6, 12, 25, 30]; 

// 对 numbers 数组的每个元素调用 obj 对象的 remainder 函数。
// map 函数的第 2 个参数传入 ogj。 
var result = numbers.map(obj.remainder, obj); 
document.write(result); 

// 输出: 
// 6,2,5,0

在下面的示例中,内置 JavaScript 方法用作回调函数。

// 对数组中的每个元素调用 Math.sqrt(value) (求平方根)
var numbers = [9, 16]; 
var result = numbers.map(Math.sqrt); 

document.write(result); 
// 输出: 3,4

[9, 16].map(Math.sqrt) 回调函数,输出的结果是 [3, 4]
但是为什么 ["1", "2", "3"].map(parseInt) 却返回 [1,NaN,NaN]

网站给出的提示是:

what you actually get is [1, NaN, NaN] because parseInt takes two parameters (val, radix) and map passes 3 (element, index, array)

简单翻译一下就是

parseInt 需要 2 个参数 (val, radix), 而 map 传递了 3 个参数 (element, index, array)」。


通过上面的解释,我们可以看出,如果想让 parseInt(string, radix) 返回 NaN,有两种情况:

  1. 第一个参数不能转换成数字。

  2. 第二个参数不在 2 到 36 之间。

我们传入的参数都能转换成数字,所以只能是第二种可能。

到底是不是呢?我们重新定义 parseInt(string, radix) 函数:

var parseInt = function(string, radix) {
    return string + "-" + radix;
};

["1", "2", "3"].map(parseInt);

输出结果为:

["1-0", "2-1", "3-2"]

看见,map 函数将数组的值 value 传递给了 parseInt 的第一个参数,将数组的索引传递给了第二个参数。
第三个参数呢?我们再加一个参数

var parseInt = function(string, radix, obj) {
    return string + "-" + radix + "-" + obj;
};

["1", "2", "3"].map(parseInt);

输出结果:

["1-0-1,2,3", "2-1-1,2,3", "3-2-1,2,3"]

我们再继续增加参数:

var parseInt = function(string, radix, obj, other) {
    return string + "-" + radix + "-" + obj + "-" + other;
};

["1", "2", "3"].map(parseInt);

输出结果:

["1-0-1,2,3-undefined", "2-1-1,2,3-undefined", "3-2-1,2,3-undefined"]

第四个参数为 undefined,看见 map 确实为 parseInt 传递了三个参数。就像作者写道的:

(element, index, array)
  1. 数组的值

  2. 数组的索引

  3. 数组

UPDATE 原文勘误:(谢谢 米粽粽 提醒)

["1", "2", "3"].map(parseInt)

应该对应的是:

[parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)]

parseInt("3", 2) 的第二个参数是界于 2-36 之间的,之所以返回 NaN 是因为 字符串 "3" 里面没有合法的二进制数,所以 NaN

我们还可以继续试验:

> ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"].map(parseInt)
[1, NaN, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

只有当第二个参数是 1 的时候返回 NaN,其它情况都返回 1

> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"].map(parseInt)
[1, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 9, 11, 13, 15, 17, 19, 21]

简单列举一下:

parseInt("1", 0);    // 十进制 1
parseInt("2", 1);    // 第二个参数不在 2-36 直接
parseInt("3", 2);    // 二进制 NaN
parseInt("4", 3);    // 三进制
parseInt("5", 4);
parseInt("6", 5);
parseInt("7", 6);
parseInt("8", 7);
parseInt("9", 8);
parseInt("10", 9);   // 九进制 (1*9+0 = 9)
parseInt("11", 10);  // 十进制 (1*10+1 = 11)
parseInt("12", 11);
parseInt("13", 12);
parseInt("14", 13);
parseInt("15", 14);
parseInt("16", 15);

(全文完)

文章来自我的个人博客:JavaScript Puzzlers 解密(一):为什么 ["1", "2", "3"].map(parseInt) 返回 [1, NaN, NaN]?

Pandas Dataframe'[在轴中找不到[nan nan nan ... nan nan nan]'

Pandas Dataframe'[在轴中找不到[nan nan nan ... nan nan nan]'

如何解决Pandas Dataframe''[在轴中找不到[nan nan nan ... nan nan nan]''

收到此错误 ''[nan nan nan ... nan nan nan] not found in axis'' 尝试从数据框中删除列(如果值为零)

train_df.head()

external_company_id company_name    email_domain    mx_record   ... 
NaN                 Expresstext     expresstext.net unkNown expresstext.net ... 0.0 0.0 0.0 0.0
NaN                 JoBox           joBox.ai    unkNown www.joBox.ai    ... 17.0    -31.0   9.0 30.0
NaN                 Relola          relola.com  unkNown home.relola.com ... 5.0 -25.0   5.0 

train_df.drop(train_df[train_df[''total_funding''] == float(0)].index,inplace = True,axis=0) 

''[nan nan nan ... nan nan nan] not found in axis''

什么会导致此错误?

解决方法

我了解到,熊猫自动将第一列用作read_csv的索引。 因为我的第一列为空,所以上一个问题中看到的每个索引都以某种方式最终成为NaN。

我运行了这两行代码以创建一个新索引并填充它。

train_df.index.name = ''id''
train_df.index = [x for x in range(1,len(train_df.values)+1)]

然后以前的错误消失了

,

代替:

train_df.drop(...)

尝试:

train_df = train_df[train_df[train_df[''total_funding''] != float(0)]

我们今天的关于熊猫、numpy.where() 和 numpy.nan熊猫python的分享就到这里,谢谢您的阅读,如果想了解更多关于"CALayer position contains NaN: [nan nan]" 自定义滑块导致的错误信息、angularjs – Kendo网格分页未正确初始化(NaN – NaN)、JavaScript Puzzlers! 解惑(一):为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?、Pandas Dataframe'[在轴中找不到[nan nan nan ... nan nan nan]'的相关信息,可以在本站进行搜索。

本文标签: