如何去除csv文件中的NaN值?python

如何去除csv文件中的NaN值?python,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,首先,我知道这件事有答案,但到目前为止,没有一个是为我工作的。不管怎样,我想知道你的答案,尽管我已经使用了这个解决方案 我有一个名为mbti_datasets.csv的csv文件。第一列的标签是类型,第二列称为说明。每一行代表一种新的人格类型(及其各自的类型和描述) 在下面的代码中,我试图在描述中包含\n时复制每个人格类型 代码: TYPE | DESCRIPTION a | This personality likes to eat apples... a | They look

首先,我知道这件事有答案,但到目前为止,没有一个是为我工作的。不管怎样,我想知道你的答案,尽管我已经使用了这个解决方案

我有一个名为
mbti_datasets.csv
的csv文件。第一列的标签是
类型
,第二列称为
说明
。每一行代表一种新的人格类型(及其各自的类型和描述)

在下面的代码中,我试图在描述中包含
\n
时复制每个人格类型

代码:

TYPE | DESCRIPTION
 a   | This personality likes to eat apples... 
 a   | They look like monkeys...
 a   | In fact, are strong people...
 b   | b.description
 b   | b.description
 c   | c.description
...  | ...
TYPE | DESCRIPTION
 a   | This personality likes to eat apples...
 a   | They look like monkeys...NaN
 a   | NaN
 a   | In fact, are strong people...NaN
 b   | b.description...NaN
 b   | NaN
 b   | b.description
 c   | c.description
...  | ...
将熊猫作为pd导入
#读取文件
path_root='gdrive/My Drive/Colab Notebooks/MBTI/MBTI_datasets.csv'
root\u fn=path\u rooth+'mbti\u datasets.csv'
df=pd.read_csv(路径_root,sep=',',quotechar='”,usecols=[0,1])
#拆分有新行的列并将其转换为一个系列
serie=df['description'].str.split('\n').apply(pd.Series,1.stack())
#删除DataFrame和要共享索引的系列的第二个索引
系列索引=系列索引液滴级别(1)
#给它一个名称以将其连接到数据帧
serie.name='description'
#删除原始列
del df[“说明”]
#基于共享索引,使用数据帧加入系列
df=df.join(系列)
#新建文件名并写入新的csv文件
root_new_fn=路径_root+'mbti_new.csv'
df.to_csv(root_new_fn,sep=',quotechar=',encoding='utf-8',index=False)
new_df=pd.read_csv(root_new_fn)
打印(新文档)
预期输出:

TYPE | DESCRIPTION
 a   | This personality likes to eat apples... 
 a   | They look like monkeys...
 a   | In fact, are strong people...
 b   | b.description
 b   | b.description
 c   | c.description
...  | ...
TYPE | DESCRIPTION
 a   | This personality likes to eat apples...
 a   | They look like monkeys...NaN
 a   | NaN
 a   | In fact, are strong people...NaN
 b   | b.description...NaN
 b   | NaN
 b   | b.description
 c   | c.description
...  | ...
电流输出:

TYPE | DESCRIPTION
 a   | This personality likes to eat apples... 
 a   | They look like monkeys...
 a   | In fact, are strong people...
 b   | b.description
 b   | b.description
 c   | c.description
...  | ...
TYPE | DESCRIPTION
 a   | This personality likes to eat apples...
 a   | They look like monkeys...NaN
 a   | NaN
 a   | In fact, are strong people...NaN
 b   | b.description...NaN
 b   | NaN
 b   | b.description
 c   | c.description
...  | ...
我不是100%确定,但我认为NaN值是
\r

根据请求上传到github的文件:

使用@YOLO解决方案: 例如,失败的地方:

2在空白随机空格中存在太阳城
3 INTJ——y las mujeres补充道——开始时
3 INTJ(…)el 0--8--de la poblaci#并不是“población”一词的结尾
10个国际ICO——与帕雷瑟无冲突——不可能实现随机开始字母
12 INTJ c#只添加一个字母
充分理解的翻译:

2 INTJ在顶部有孤独感,在空白处有孤独感
3 INTJ——以及女性——在开头
人口的0--8--上的3 INTJ(…)#不以“人口”这个词结尾
10个INTJ ICO——这似乎是不可能的冲突随机开始字母
12 INTJ c#只添加一个字母
当我显示是否有任何NaN值以及哪种类型时:

TYPE | DESCRIPTION
 a   | This personality likes to eat apples... 
 a   | They look like monkeys...
 a   | In fact, are strong people...
 b   | b.description
 b   | b.description
 c   | c.description
...  | ...
TYPE | DESCRIPTION
 a   | This personality likes to eat apples...
 a   | They look like monkeys...NaN
 a   | NaN
 a   | In fact, are strong people...NaN
 b   | b.description...NaN
 b   | NaN
 b   | b.description
 c   | c.description
...  | ...
print(new_df['description'].isnull())
0错误
1错误
2错误
3错误
4错误
5错误
6错误
7正确
8错误
9正确
10错误
11对
继续。。。

这里有一个方法,我必须找到一个变通方法来替换
\n
字符,但不知怎么的,它没有以直接的方式工作:

df['DESCRIPTION'] = df['DESCRIPTION'].str.replace('[^a-zA-Z0-9\s.]','--').str.split('--n')

df = df.explode('DESCRIPTION')

print(df)

           TYPE                               DESCRIPTION
0   a             This personality likes to eat apples...
0   a                           They look like monkeys...
0   a                      In fact-- are strong people...
1   b                                       b.description
2   c                                       c.description
3   d                                       d.description

问题可归因于描述单元,因为有两个新的连续行的零件,它们之间没有任何内容

我只是使用
.dropna()
读取创建的新csv,并在没有NaN值的情况下重写它。无论如何,我认为重复这个过程不是最好的方法,但它作为一个解决方案是直接进行的

df.to_csv(root_new_fn,sep=',quotechar=',encoding='utf-8',index=False)
new_df=pd.read_csv(root_new_fn).dropna()
新的文档到csv(根文档新文档,sep=',quotechar=',编码='utf-8',索引=False)
new_df=pd.read_csv(root_new_fn)
打印(键入(new_df.iloc[7,1])#其中是一个NaN值
打印(new_df['description'].isnull())
0错误
1错误
2错误
3错误
4错误
5错误
6错误
7错误
8错误
并继续。。。

先用
.replace('\r','')
来摆脱
\r
怎么样?@MatthewSon我已经试过了,正如我前面所说,我不能100%确定这个NaN值是否正确,然后请提供一个。否则我们只能猜测NaN值来自何处。如果我们真的有文件、样本集或类似的东西,可能会更容易得到帮助。@LeoE我刚刚将文件上传到github并共享了描述中的链接。它正在努力去除NaN值,但正在破坏句子的sintaxis,没有完成单词或没有完成句子。例如:
——这个p--r个体是…
。我想是因为单词(áíóú)的重读(描述是西班牙语和英语的)。此外,我不完全理解这个字符串
'[^a-zA-Z0-9\s.]
,也许充分理解这一部分可以给我一个准确的解决方案。你的代码的结果是:你能用更多的例子更新这个问题吗<代码>[^a-zA-Z0-9\s.]基本上删除所有不是字母、数字、空格或点的内容。