我想知道是否可以使用pandas to_csv()函数将数据帧添加到现有的csv文件中.csv文件与加载的数据具有相同的结构.
如何在熊猫中做到这一点:
我extract_text_features在单个文本列上有一个函数,返回多个输出列.具体来说,该函数返回6个值.
该函数有效,但似乎没有任何正确的返回类型(pandas DataFrame/numpy数组/ Python列表),以便输出可以正确分配 df.ix[: ,10:16] = df.textcol.map(extract_text_features)
所以我认为我需要回到迭代df.iterrows(),按照这个?
更新:迭代df.iterrows()速度至少慢20倍,所以我投降并将函数拆分为六个不同的.map(lambda ...)调用.
我需要删除pandas中数据帧的前三行.
我知道df.ix[:-1]会删除最后一行,但我无法弄清楚如何删除前n行.
从父数据帧中选择子数据帧时,我注意到一些程序员使用该.copy()方法复制数据帧.
他们为什么要复制数据框?如果我不复制会怎么样?
我有一个大的(大约12M行)数据帧df说:
df.columns = ['word','documents','frequency']
Run Code Online (Sandbox Code Playgroud)
所以以下内容及时进行:
word_grouping = df[['word','frequency']].groupby('word')
MaxFrequency_perWord = word_grouping[['frequency']].max().reset_index()
MaxFrequency_perWord.columns = ['word','MaxFrequency']
Run Code Online (Sandbox Code Playgroud)
但是,这需要很长时间才能运行:
Occurrences_of_Words = word_grouping[['word']].count().reset_index()
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?有没有更好的方法来计算大型数据框中的出现次数?
df.word.describe()
Run Code Online (Sandbox Code Playgroud)
运行得很好,所以我真的没想到这个Occurrences_of_Words数据帧需要很长时间才能构建.
ps:如果答案很明显,你觉得有必要惩罚我提出这个问题,请同时提供答案.谢谢.
我想找到包含字符串的行,如下所示:
DF[DF.col.str.contains("foo")]
Run Code Online (Sandbox Code Playgroud)
但是,这会失败,因为有些元素是NaN:
ValueError:无法使用包含NA/NaN值的向量进行索引
所以我诉诸混淆
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
如何使用pandas过滤哪些CSV行加载到内存中?这似乎是一个应该找到的选项read_csv.我错过了什么吗?
示例:我们有一个带有时间戳列的CSV,我们只想加载时间戳大于给定常量的行.
有没有内置的方法可以在不知道行的长度的情况下read_csv只读取n文件的第一行?我有一个大文件,需要很长时间才能阅读,偶尔只想使用第一行,比方说20行来获取它的样本(并且不想加载完整的东西并占据它的头部).
如果我知道我可以做的事情的总行数,footer_lines = total_lines - n并将其传递给skipfooter关键字arg.我目前的解决方案是手动抓取npython和StringIO 的第一行到pandas:
import pandas as pd
from StringIO import StringIO
n = 20
with open('big_file.csv', 'r') as f:
head = ''.join(f.readlines(n))
df = pd.read_csv(StringIO(head))
Run Code Online (Sandbox Code Playgroud)
它并没有那么糟糕,但有一种更简洁,"pandasic"(?)方式用关键字或其他方式做到这一点?
我想通过每行的函数来过滤行,例如
def f(row):
return sin(row['velocity'])/np.prod(['masses']) > 5
df = pandas.DataFrame(...)
filtered = df[apply_to_all_rows(df, f)]
Run Code Online (Sandbox Code Playgroud)
或者对于另一个更复杂,人为的例子,
def g(row):
if row['col1'].method1() == 1:
val = row['col1'].method2() / row['col1'].method3(row['col3'], row['col4'])
else:
val = row['col2'].method5(row['col6'])
return np.sin(val)
df = pandas.DataFrame(...)
filtered = df[apply_to_all_rows(df, g)]
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
我想将以下csv导入为字符串而不是int64.Pandas read_csv自动将其转换为int64,但我需要将此列作为字符串.
ID
00013007854817840016671868
00013007854817840016749251
00013007854817840016754630
00013007854817840016781876
00013007854817840017028824
00013007854817840017963235
00013007854817840018860166
df = read_csv('sample.csv')
df.ID
>>
0 -9223372036854775808
1 -9223372036854775808
2 -9223372036854775808
3 -9223372036854775808
4 -9223372036854775808
5 -9223372036854775808
6 -9223372036854775808
Name: ID
Run Code Online (Sandbox Code Playgroud)
不幸的是使用转换器会产生相同的结
df = read_csv('sample.csv', converters={'ID': str})
df.ID
>>
0 -9223372036854775808
1 -9223372036854775808
2 -9223372036854775808
3 -9223372036854775808
4 -9223372036854775808
5 -9223372036854775808
6 -9223372036854775808
Name: ID
Run Code Online (Sandbox Code Playgroud)