如果空列上的条件不起作用

2024-09-29 23:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,这是伟大的工作,直到我得到一个csv文件,这是在这个特定的列空。我试着改正,但不知怎么的还是不管用。你知道吗

我的代码应该做的是将serialnumbers拆分为同一项缺少的行。当列中至少有一个serial num时,它工作,在应该的位置打印这个,其余的都是空的。如果它们的数量更多,它也会起作用,但如果没有,则不会起作用:/ 所以我试了这个:

function = (lambda x: x['SerialNumbers']
            if x['SerialNumbers'] is numpy.nan
            else x['SerialNumbers'][x['count']])


copySerial = updated_csv['SerialNumbers'].copy()

if not (copySerial is numpy.nan):
    function = (lambda x: x['SerialNumbers']
            if x['SerialNumbers'] is numpy.nan
            else x['SerialNumbers'][x['count']])
    updated_csv['SerialNumbers'] = updated_csv['SerialNumbers'].str.split(' ')
    updated_csv['SerialNumbers'] = updated_csv.apply(function, axis=1)

如果有什么东西或没有它进入如果条件

我也试过这个: -基于上述功能和copySerial:

updated_csv['SerialNumbers'] = numpy.where((copySerial != '')|(copySerial != 'nan') ,updated_csv['SerialNumbers'].str.split(' '), updated_csv['SerialNumbers'])
updated_csv['SerialNumbers'] = numpy.where((copySerial != '')|(copySerial != 'nan'), updated_csv.apply(function, axis=1), updated_csv['SerialNumbers'])

同样,我试着用原始列来做if条件,但是没有成功。我不知道怎么纠正它。你知道吗

我也试过这个:

if [~updated_csv['SerialNumbers'].empty]:

但还是没用

任何帮助都会很好

编辑: 这里有一个csv文件示例,应该使用:

Auftragsdatum;Auftrags-Nr.;Ihre Referenz;Auftragswert;Pos.;Menge;Art.Nr.;Herst.Nr.;Produktname;Ihre Referenz (Position);Netto / Stk.;Rechn.-Nr.;Liefers.-Nr.;Serien-Nr.;Hersteller
20.11.2019;703;;1056,36;100;2;3441223;abc;APC Smart-UPS;;820,4;;;123 122;APC
20.11.2019;703;;1056,36;200;1;1492133;cde;APC UPS;;224,88;;;;APC
20.11.2019;703;;1056,36;300;1;7000061;;Frachtkosten automatisch;;8,99;;;;;
20.11.2019;703;;1056,36;400;1;7003581;;Mautgebühr;;2,09;;;;;

在原始csv中,列名为Serien Nr。在Serien-Nr列的第一行中,有两个序列号,名为123 122我想复制第一行,因为数量(即Menge)是2,然后拆分每行的序列号

因此,最终的结果应该是:

Auftragsdatum;Auftrags-Nr.;Ihre Referenz;Auftragswert;Pos.;Menge;Art.Nr.;Herst.Nr.;Produktname;Ihre Referenz (Position);Netto / Stk.;Rechn.-Nr.;Liefers.-Nr.;Serien-Nr.;Hersteller
20.11.2019;703;;1056,36;100;2;3441223;abc;APC Smart-UPS;;820,4;;;123;APC
20.11.2019;703;;1056,36;100;2;3441223;abc;APC Smart-UPS;;820,4;;;122;APC
20.11.2019;703;;1056,36;200;1;1492133;cde;APC UPS;;224,88;;;;APC
20.11.2019;703;;1056,36;300;1;7000061;;Frachtkosten automatisch;;8,99;;;;;
20.11.2019;703;;1056,36;400;1;7003581;;Mautgebühr;;2,09;;;;;

但是如果没有序列号的话,它应该复制数量的行


Tags: csvnumpy数量iffunctionnannrups
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:16

这就是你要找的吗?我想你有熊猫的一切:

from io import StringIO
import pandas as pd

csv_file = StringIO("""Auftragsdatum;Auftrags-Nr.;Ihre Referenz;Auftragswert;Pos.;Menge;Art.Nr.;Herst.Nr.;Produktname;Ihre Referenz (Position);Netto / Stk.;Rechn.-Nr.;Liefers.-Nr.;Serien-Nr.;Hersteller
20.11.2019;703;;1056,36;100;2;3441223;abc;APC Smart-UPS;;820,4;;;123 122;APC
20.11.2019;703;;1056,36;200;1;1492133;cde;APC UPS;;224,88;;;;APC
20.11.2019;703;;1056,36;300;1;7000061;;Frachtkosten automatisch;;8,99;;;;
20.11.2019;703;;1056,36;400;1;7003581;;Mautgebühr;;2,09;;;;""")

df = pd.read_csv(csv_file,sep=";")
temp_df = pd.DataFrame(columns=df.columns)
for index,row in df.iterrows():
    if row["Menge"] > 1: # check if count is bigger than one. all row["Menge"] could also replaced with len(df["Serien-Nr."].split(" "))
        split_serial = row["Serien-Nr."].split(" ")
        df.loc[index,"Serien-Nr."] = split_serial[0]
        for m in range(1,row["Menge"]): # for loop in case that there are more serial numbers than only two
            row["Serien-Nr."] = split_serial[m]
            temp_df = temp_df.append(row)

df = pd.concat([temp_df,df],axis=0).reset_index()

输出print(df)

  Auftragsdatum Auftrags-Nr.    ...     Serien-Nr. Hersteller
0    20.11.2019          703    ...            122        APC
1    20.11.2019          703    ...            123        APC
2    20.11.2019          703    ...            NaN        APC
3    20.11.2019          703    ...            NaN        NaN
4    20.11.2019          703    ...            NaN        NaN

第一部分只是将数据读入熊猫体内。我没有使用任何重命名,所以我的Serien-Nr.是你的SerialNumbers,你的count是我的Menge

我遍历df,当count/Menge大于1时,我进行拆分并将所有新行(如果count/Menge大于3或更大)添加到新df。你知道吗

最后我把这两个df加在一起。你知道吗

编辑:您也可以跳过tmp df的创建,这不重要。请注意,新添加的行不在原始行的正下方/正上方。所以如果有关系的话,你以后就要点了。你知道吗

相关问题 更多 >

    热门问题