Python 如何删除具有NaN值的行,以便压缩和范围
我有一个在两列之间取值的代码,当没有空单元格时,代码正常工作,我尝试了df.isnull,dropna,总是同样的问题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_
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'))如果解决了这个问题,您可以标记已回答,向上投票,然后关闭。