如何去除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.]基本上删除所有不是字母、数字、空格或点的内容。