将整数存储为整数而不是浮点数

2024-04-27 04:19:56 发布

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

我做了以下工作:

import pandas as pd

df_texts = pd.read_csv('data_texts.csv', keep_default_na=True)

for index, row in df_texts.iterrows():   

    list_of_words = row['text'].split()

    df_texts.loc[index, '#_words'] = len(list_of_words)

    list_of_unique_words = set(list_of_words)  

    df_texts.loc[index, '#_unique_words'] = len(list_of_unique_words)

问题是#_words#_unique_words列上的数字被存储为浮点,即使它们是整数。你知道吗

只是为了澄清这两列在我读取的.csv(pd.read_csv)中并不存在,而是在for循环中创建的。你知道吗

如何将它们直接存储为整数?你知道吗


Tags: ofcsvdfforreadindexlen整数
3条回答

如果通过将值赋给一行来创建列,则所有其他行都隐式初始化为NaN,这是一个浮点值。这将强制整个列float。你知道吗

(如果在设置所有值之前尝试使用df_texts['#_words'] = df_texts['#_words'].astype(int)转换列,您也会注意到这一点。它将失败,因为NaN无法转换为int。)

因此,在设置所有值之前,列不能成为整数列。如果在循环之前用df_texts['#_words'] = 0初始化整个列,问题就会消失。你知道吗

编辑:另外,正如其他答案所指出的,这个作业可以不首先使用循环来完成。你知道吗

可以对所需列应用int函数:

df= pd.DataFrame({
    'n':[1.12, 1.2345, 5.234]
})
df['n'] = df['n'].apply(lambda x: int(x))
df
    n
0   1
1   1
2   5

要做到这一点并直接获取int,更好的方法是直接分配新的列,并避免遍历整个数据帧。你知道吗

以一些虚拟数据为例:

import pandas as pd
texts = ['word1 word2 word3', 'word1 word2 word1', 'word3']

df_texts = pd.DataFrame(texts, columns = ['text'])
                text
0  word1 word2 word3
1  word1 word2 word1
2              word3

分别使用文本列计算所有行的长度,然后指定。你知道吗

temp = df_texts['text'].str.split()
df_texts['#_words'] = [len(row) for row in temp] #iterates and creates a list of all lengths. assign to df
df_texts['#_unique_words'] = [len(set(row)) for row in temp]

print(df_texts)
#Output:
                text  #_words  #_unique_words
0  word1 word2 word3        3               3
1  word1 word2 word1        3               2
2              word3        1               1

相关问题 更多 >