在将DataFrame写入csv文件时,我似乎找不到为浮点数设置小数点("."或",")的选项.(阅读没有问题.)我的任务/问题:我正在发布一个程序/脚本,并希望所有用户都独立于他们的操作系统和语言设置来使用它,并专门生成一个带有小数点设置的csv输出,如"locale"中给出的那样.localeconv()[ "的decimal_point"]"."float_format"选项对我没用.我是否需要将每个浮点数转换为字符串并替换"." 用","?如果这是在其他地方发布的,请原谅我的错误,并提供正确的链接.
非常感谢您的时间和精力!
我想知道是否有一种更快,更"pythonic"的方式来执行以下操作,例如使用一些内置方法.给定一个pandas DataFrame或numpy浮点数组,如果该值等于或小于0.5,我需要计算倒数值并乘以-1并将旧值替换为新计算的值."变换"可能是一个糟糕的词语选择,请告诉我你是否有更好/更准确的描述.
感谢您的帮助和支持!
数据:
import numpy as np
import pandas as pd
dicti = {"A" : np.arange(0.0, 3, 0.1),
"B" : np.arange(0, 30, 1),
"C" : list("ELVISLIVES")*3}
df = pd.DataFrame(dicti)
Run Code Online (Sandbox Code Playgroud)
我的功能:
def transform_colname(df, colname):
series = df[colname]
newval_list = []
for val in series:
if val <= 0.5:
newval = (1/val)*-1
newval_list.append(newval)
else:
newval_list.append(val)
df[colname] = newval_list
return df
Run Code Online (Sandbox Code Playgroud)
功能调用:
transform_colname(df, colname="A")
Run Code Online (Sandbox Code Playgroud)
** - >我在这里总结了结果,因为评论不允许发布代码(或者我不知道如何去做).**
谢谢大家快速而有力的答案!
使用ipython"%timeit"和"真实"数据:
我的功能: 10个循环,最好的3:每循环24.1毫秒
来自jojo:
def transform_colname_v2(df, colname):
series = df[colname]
df[colname] = np.where(series <= …Run Code Online (Sandbox Code Playgroud) 问题: 如何“pd.read_csv”以使给定列中的值属于列表类型(列的每一行中的列表)?
创建 DataFrame 时(从字典,见下文),各个值的类型为列表。问题:将 DataFrame 写入文件并从文件读回 DataFrame 后,我得到一个字符串而不是列表。
创建数据框import pandas as pd
dict2df = {"euNOG": ["ENOG410IF52", "KOG2956", "KOG1997"],
"neg": [[58], [1332, 753, 716, 782], [187]],
"pos": [[96], [659, 661, 705, 1228], [1414]]}
df = pd.DataFrame(dict2df)
Run Code Online (Sandbox Code Playgroud)
type(df.loc[0, 'neg']) == list # --> True
type(df.loc[0, 'neg']) == str # --> False
df.loc[1, 'neg'][-1] == 782 # --> True
Run Code Online (Sandbox Code Playgroud)
写入文件
df.to_csv('DataFrame.txt', sep='\t', header=True, index=False)
Run Code Online (Sandbox Code Playgroud)
从文件中读取
df = pd.read_csv('DataFrame.txt', sep='\t')
Run Code Online (Sandbox Code Playgroud)
type(df.loc[0, 'neg']) == list # --> …Run Code Online (Sandbox Code Playgroud)