Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除具有NaN值的行,以便压缩和范围_Python_Pandas_Dataframe_Range - Fatal编程技术网

Python 如何删除具有NaN值的行,以便压缩和范围

Python 如何删除具有NaN值的行,以便压缩和范围,python,pandas,dataframe,range,Python,Pandas,Dataframe,Range,我有一个在两列之间取值的代码,当没有空单元格时,代码正常工作,我尝试了df.isnull,dropna,总是同样的问题 import pandas as pd import numpy as np path = [('SC200', 100, 102), ('Unified', 210, 210), ('Clé',np.nan,np.nan), ('samsung', 155, 158), ] df_

我有一个在两列之间取值的代码,当没有空单元格时,代码正常工作,我尝试了df.isnull,dropna,总是同样的问题

import pandas as pd
import numpy as np


path  = [('SC200', 100, 102),
           ('Unified', 210, 210),
           ('Clé',np.nan,np.nan),
           ('samsung', 155, 158),
           ]

df_l = pd.DataFrame(path, columns=['Désignation', 'First', 'Last'])

zipped_l = zip(df_l['Désignation'], df_l['First'], df_l['Last'])

df_l = pd.DataFrame([(k, y) for k, s, e in zipped_l for y in range(s, e+1) ], columns=['Désignation', 'KITCODE'])

print(df_l)

这就是你想做的吗

import pandas as pd
import numpy as np

path  = [('SC200', 100, 102),
           ('Unified', 210, 210),
           ('Clé',np.nan,np.nan),
           ('samsung', 155, 158),
           ]

df_l = pd.DataFrame(path, columns=['Désignation', 'First', 'Last'])
print (df_l)
def kitcd(d):
    first = int(d.First)
    last  = int(d.Last) + 1
    return [i for i in range(first, last)]

df_l['KITCODE'] = df_l.apply(lambda x: kitcd(x) if pd.notnull(x.First) else x.First, axis = 1)
df_l = df_l.explode('KITCODE')

print (df_l)
其输出将为:

原始数据帧:

  Désignation  First   Last
0       SC200  100.0  102.0
1     Unified  210.0  210.0
2         Clé    NaN    NaN
3     samsung  155.0  158.0
使用KITCODE更新数据帧:

  Désignation  First   Last KITCODE
0       SC200  100.0  102.0     100
0       SC200  100.0  102.0     101
0       SC200  100.0  102.0     102
1     Unified  210.0  210.0     210
2         Clé    NaN    NaN     NaN
3     samsung  155.0  158.0     155
3     samsung  155.0  158.0     156
3     samsung  155.0  158.0     157
3     samsung  155.0  158.0     158
如果要忽略具有NaN的行,则可以将代码更改为以下内容:

def kitcd(d):
    first = int(d.First)
    last  = int(d.Last) + 1
    return [i for i in range(first, last)]

df_l = df_l.dropna(axis=0, subset=['First', 'Last'])

df_l['KITCODE'] = df_l.apply(lambda x: kitcd(x), axis = 1)
df_l = df_l.explode('KITCODE')

print (df_l)

这将从df_l中删除记录,并帮助您正常处理数据。输出将具有相同的集合,其中缺少一行
“Clé”

能否将源数据作为明文放在问题部分。请不要发布图片和图片链接。这些链接可能会随着时间的推移而过期。@JoeFerndz:已经完成;)你也可以发布你想要的输出吗?解决方案可能比我们认为需要解决的更简单。谢谢,您给了我另一个解决方案,我用0替换了non,并将列转换为intdf_l['First']=(df_l['First'].fillna(0)。astype('Int64'))| df_l['Last']=(df_l['Last'].fillna(0)。astype('Int64'))如果解决了这个问题,您可以标记已回答,向上投票,然后关闭。